That is because in
BufferedImage
s with a
ColorModel
the pixel is set to the nearest colour chosen. That means that you might not get the colour you wanted because the colours you can set are limited to the colours in the
ColorModel
.
You can get around that by creating your own
BufferedImage
and draw the source image onto that and then manipulate those pixels;
package com.bornander.test;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class Program {
public static void main(String[] args) throws Exception {
BufferedImage src = ImageIO.read(new File("C:\\Temp\\SomeImage.png"));
BufferedImage dst = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_4BYTE_ABGR);
dst.getGraphics().drawImage(src, 0, 0, null);
System.out.println("Before: " + dst.getRGB(0, 0));
dst.setRGB(0, 0, 1234);
System.out.println("After : " + dst.getRGB(0, 0));
}
}
Hope this helps,
Fredrik