我正在开发一个捕获屏幕快照并从捕获的图像创建视频的应用程序。但是问题在于,当生成视频时,生成的视频中的颜色非常粉红色。我认为这是因为我正在使用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;
请告诉我如何获取颜色与屏幕上实际颜色相同的图像。
谢谢。
如本例所示,使用BufferedImage.TYPE_INT_ARGB或。如果您需要更改颜色,则可以将其与具有四成分的LookupTable一起使用,该成分可根据以下要求调整Alpha成分:“当非透明Alpha数据存储在此类型的图像中时,必须调整颜色数据转换为非预乘形式,并丢弃alpha。” 在 使用Java 2D 过滤器类处理图像 和 使用Java 2D进行图像处理中 可以找到示例。BufferedImage.TYPE_INT_RGBLookupOpBufferedImage.TYPE_3BYTE_BGR LookupOp __
BufferedImage.TYPE_INT_ARGB
BufferedImage.TYPE_INT_RGB
LookupOp
BufferedImage.TYPE_3BYTE_BGR