L
linuxadmin
hello!
i load JPEG images into BufferedImage objects and draw them using
Graphics2D.drawImage(...)
to be able to use LookupOp (for gamma and brightness adjustments) i
have to convert them to one of the following image types:
TYPE_INT_RGB or TYPE_INT_BGR.
the JPEG-native type TYPE_INT_3BGR doesn't work.
[ note: the conversion is done by creating an empty BufferedImage with
same size but different image type, and drawing the loaded image into
the newly created image: ]
BufferedImage img = ImageIO.read(new File(fileName));
BufferedImage temp;
temp = new BufferedImage(img.getWidth(), img.getHeight(),
BufferedImage.TYPE_INT_RGB // <-problem
);
temp.getGraphics().drawImage(img, 0, 0, null);
img = temp;
now the problem:
the images are drawn correctly, when using
TYPE_INT_BGR under linux but: TYPE_INT_RGB under windows.
so, when the 'wrong' type is used, the colors look ugly.
i tried to get to know the system-native image type by letting
GraphicConfiguration create a BufferedImage:
GraphicsEnvironment ge = GraphicsEnvironment
.getLocalGraphicsEnvironment();
GraphicsDevice gd = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = gd.getDefaultConfiguration();
BufferedImage bestImage = gc.createCompatibleImage(1, 1);
but: on both systems bestImage.getType() equals TYPE_INT_RGB, so under
linux the colors are wrong.
i think that it is wrong to assume, that the linux platform always
implies TYPE_INT_BGR and the windows platform always implies
TYPE_INT_RGB.
so how can i get the real system-native image type?
thanks in advice!
i load JPEG images into BufferedImage objects and draw them using
Graphics2D.drawImage(...)
to be able to use LookupOp (for gamma and brightness adjustments) i
have to convert them to one of the following image types:
TYPE_INT_RGB or TYPE_INT_BGR.
the JPEG-native type TYPE_INT_3BGR doesn't work.
[ note: the conversion is done by creating an empty BufferedImage with
same size but different image type, and drawing the loaded image into
the newly created image: ]
BufferedImage img = ImageIO.read(new File(fileName));
BufferedImage temp;
temp = new BufferedImage(img.getWidth(), img.getHeight(),
BufferedImage.TYPE_INT_RGB // <-problem
);
temp.getGraphics().drawImage(img, 0, 0, null);
img = temp;
now the problem:
the images are drawn correctly, when using
TYPE_INT_BGR under linux but: TYPE_INT_RGB under windows.
so, when the 'wrong' type is used, the colors look ugly.
i tried to get to know the system-native image type by letting
GraphicConfiguration create a BufferedImage:
GraphicsEnvironment ge = GraphicsEnvironment
.getLocalGraphicsEnvironment();
GraphicsDevice gd = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = gd.getDefaultConfiguration();
BufferedImage bestImage = gc.createCompatibleImage(1, 1);
but: on both systems bestImage.getType() equals TYPE_INT_RGB, so under
linux the colors are wrong.
i think that it is wrong to assume, that the linux platform always
implies TYPE_INT_BGR and the windows platform always implies
TYPE_INT_RGB.
so how can i get the real system-native image type?
thanks in advice!