使用Java解析图像,针对不同的像素颜色执行不同的操作

时间:2014-11-12 13:51:34

标签: java image pixel javax.imageio

我想用前一个像素的颜色为我图像中的每个黑色像素着色。并且如果存在2个或更多个连续的黑色像素,则采用最后的非黑色像素的颜色。我想出了如何迭代像素,但像素不会改变它们的颜色。我想我会错过"保存更改"线。

这里是代码:

public static void iteratePixels() throws IOException {
    File file = new File("C:\\blackDots.png");
    BufferedImage image = ImageIO.read(file);
    int lastNotBlack = -1;
    int actualColour = 0;

    for (int x = 0; x < image.getHeight(); x++) {
        for (int y = 0; y < image.getWidth(); y++) {

            int black = -16777216;

            try {
                actualColour = image.getRGB(x, y);

            } catch (Exception e) {
                continue;
            }
            if(image.getRGB(x, y)==black){
                image.setRGB(x, y, lastNotBlack);

                System.out.println("black pixel at: " +x +" "+y);
            }
            if (actualColour != black){
                lastNotBlack= actualColour;
            }

        }
    }
}

那么我如何应用这些变化呢?还是有另一个错误?

1 个答案:

答案 0 :(得分:1)

您只是在内存中的图像中更改像素,但您需要将这些像素写回文件:

ImageIO.write(image, "png", new File("C:\\blackDots_modified.png"));

(在所有像素被修改后调用)

另见:https://docs.oracle.com/javase/tutorial/2d/images/saveimage.html