BufferedImage颜色变化

时间:2011-05-25 10:26:13

标签: java

我正在处理一个应用程序,它捕获屏幕截图并从捕获的图像中创建视频。但问题是,当生成视频时,生成的视频中的颜色非常粉红。我想这是因为我正在使用BufferedImage.TYPE_3BYTE_BGR类型操纵捕获的图像来显示光标。有人能告诉我如何解决这个问题,我希望视频的颜色与屏幕的实际颜色相同。

为了捕获屏幕图像,我的工作如下:

Robot robot = new Robot();
Rectangle captureSize = new Rectangle(screenBounds);
return robot.createScreenCapture(captureSize);

对于操作图像我的做法如下:

image = new BufferedImage(sourceImage.getWidth(), sourceImage.getHeight(), BufferedImage.TYPE_3BYTE_BGR);

if (true) {
    int x = MouseInfo.getPointerInfo().getLocation().x - 25;
            int y = MouseInfo.getPointerInfo().getLocation().y - 37;

            Graphics2D graphics2D = sourceImage.createGraphics();`enter code here`
            graphics2D.drawImage(SimpleWebBrowserExample.m_MouseIcon, x, y, 48, 48, null);
        }
        image.getGraphics().drawImage(sourceImage, 0, 0, null);
return image;

请告诉我如何在屏幕上获得与实际颜色相同颜色的图像。

感谢。

2 个答案:

答案 0 :(得分:3)

使用BufferedImage.TYPE_INT_ARGBBufferedImage.TYPE_INT_RGB,如example所示。如果您需要更改颜色,可以使用带有四组分LookupTable的LookupOp,根据BufferedImage.TYPE_3BYTE_BGR的需要调整alpha组件:“当具有非不透明alpha的数据存储在图像中时在这种类型中,必须将颜色数据调整为非预乘形式,并丢弃alpha。“可以在Using the Java 2D LookupOp Filter Class to Process ImagesImage processing with Java 2D中找到示例。

答案 1 :(得分:2)

请参阅“粉红色”解释here

基本上,图像保存为ARGB,大多数观看者将其解释为CMYK。但是,在Java中打开Alpha时会保留Alpha。