我正在处理一个应用程序,它捕获屏幕截图并从捕获的图像中创建视频。但问题是,当生成视频时,生成的视频中的颜色非常粉红。我想这是因为我正在使用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;
请告诉我如何在屏幕上获得与实际颜色相同颜色的图像。
感谢。
答案 0 :(得分:3)
使用BufferedImage.TYPE_INT_ARGB
或BufferedImage.TYPE_INT_RGB
,如example所示。如果您需要更改颜色,可以使用带有四组分LookupTable的LookupOp
,根据BufferedImage.TYPE_3BYTE_BGR
的需要调整alpha组件:“当具有非不透明alpha的数据存储在图像中时在这种类型中,必须将颜色数据调整为非预乘形式,并丢弃alpha。“可以在Using the Java 2D LookupOp
Filter Class to Process Images和Image processing with Java 2D中找到示例。
答案 1 :(得分:2)
请参阅“粉红色”解释here
基本上,图像保存为ARGB,大多数观看者将其解释为CMYK。但是,在Java中打开Alpha时会保留Alpha。