如何解决BufferedImage颜色更改
| 我正在开发一个可捕获屏幕快照并根据捕获的图像创建视频的应用程序。但是问题在于,当生成视频时,生成的视频中的颜色非常粉红色。我认为这是因为我正在使用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,null);
}
image.getGraphics().drawImage(sourceImage,null);
return image;
请告诉我如何获取颜色与屏幕上实际颜色相同的图像。
谢谢。
解决方法
如本例所示,使用
BufferedImage.TYPE_INT_ARGB
或BufferedImage.TYPE_INT_RGB
。如果需要更改颜色,则可以将LookupOp
与具有四成分的LookupTable配合使用,该表格可根据BufferedImage.TYPE_3BYTE_BGR
的要求调整alpha成分:\“当非透明alpha数据存储在此类型的图像中时,颜色数据必须将其调整为非预乘形式并丢弃alpha。\“示例可以在使用Java 2DLookupOp
过滤器类处理图像和使用Java 2D进行图像处理中找到。
,请参阅此处的“粉红色”说明
基本上,图像被保存为ARGB,大多数观众将其解释为CMYK。但是,在Java中重新打开Alpha时会保留它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。