java 缓冲图像颜色变化

gmxoilav  于 2023-02-11  发布在  Java
关注(0)|答案(2)|浏览(125)

我正在开发一个应用程序,它可以捕获屏幕截图并从捕获的图像创建视频。但问题是,当生成视频时,生成的视频中的颜色非常粉红色。我认为这是因为我使用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;

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

mitkmikd

mitkmikd1#

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

ohtdti5x

ohtdti5x2#

请参见此处的“粉红色”解释
基本上,图像被保存为ARGB格式,大多数浏览者将其解释为CMYK格式。不过,在Java中打开时,Alpha仍会保留。

相关问题