我想用前一个像素的颜色为我图像中的每个黑色像素着色。并且如果存在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;
}
}
}
}
那么我如何应用这些变化呢?还是有另一个错误?
答案 0 :(得分:1)
您只是在内存中的图像中更改像素,但您需要将这些像素写回文件:
ImageIO.write(image, "png", new File("C:\\blackDots_modified.png"));
(在所有像素被修改后调用)
另见:https://docs.oracle.com/javase/tutorial/2d/images/saveimage.html