I was working on a simple image editing program, when i came across a problem with the bufferedimage. What i am trying to do is simple, get the red, green, blue and alpha values from the image; however the numbers i am getting back are inaccurate. I then decided to make a sample class to show the issue i am having which is as follows:
The output for this code is:
As you can see, the values are slightly off, which in the case of an image editing program this can be a big issue. Is there another way to pull out the pixel colors without it being distorted? Thanks in advance for any help and interest in this issue!
import java.awt.Color; import java.awt.Graphics; import java.awt.image.BufferedImage; public class SampleCode { public void CreateImage() { //Creates the image and the graphics BufferedImage img = new BufferedImage(50,50,BufferedImage.TYPE_INT_ARGB); Graphics g = img.getGraphics(); //All the sample colors i will use Color color1 = new Color(10,115,16,32); Color color2 = new Color(32,43,38,115); Color color3 = new Color(200,16,101,80); Color color4 = new Color(201,68,13,99); Color color5 = new Color(60,115,12,200); Color color6 = new Color(1,80,19,230); //Draws all the colors to the image g.setColor(color1); g.fillRect(0, 0, 1, 1); g.setColor(color2); g.fillRect(1, 0, 1, 1); g.setColor(color3); g.fillRect(2, 0, 1, 1); g.setColor(color4); g.fillRect(3, 0, 1, 1); g.setColor(color5); g.fillRect(4, 0, 1, 1); g.setColor(color6); g.fillRect(5, 0, 1, 1); //Now the image is done, i will dispose of the graphics and the colors g.dispose(); color1 = null; color2 = null; color3 = null; color4 = null; color5 = null; color6 = null; //Goes back and reads the colors from the new bufferedimage color1 = new Color(img.getRGB(0, 0),true); color2 = new Color(img.getRGB(1, 0),true); color3 = new Color(img.getRGB(2, 0),true); color4 = new Color(img.getRGB(3, 0),true); color5 = new Color(img.getRGB(4, 0),true); color6 = new Color(img.getRGB(5, 0),true); //Now print out each color's value System.out.println(color1.getRed() + " " + color1.getGreen() + " " + color1.getBlue() + " " + color1.getAlpha()); System.out.println(color2.getRed() + " " + color2.getGreen() + " " + color2.getBlue() + " " + color2.getAlpha()); System.out.println(color3.getRed() + " " + color3.getGreen() + " " + color3.getBlue() + " " + color3.getAlpha()); System.out.println(color4.getRed() + " " + color4.getGreen() + " " + color4.getBlue() + " " + color4.getAlpha()); System.out.println(color5.getRed() + " " + color5.getGreen() + " " + color5.getBlue() + " " + color5.getAlpha()); System.out.println(color6.getRed() + " " + color6.getGreen() + " " + color6.getBlue() + " " + color6.getAlpha()); } }
The output for this code is:
8 112 16 32 31 42 38 115 201 16 102 80 201 67 13 99 60 115 11 200 1 80 19 230
As you can see, the values are slightly off, which in the case of an image editing program this can be a big issue. Is there another way to pull out the pixel colors without it being distorted? Thanks in advance for any help and interest in this issue!