2011-05-25 108 views
1

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

用于捕捉我做的画面如下:

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; 

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

谢谢。

回答

3

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

+0

另请参阅['RescaleOp'](http://stackoverflow.com/questions/5838842/java-lang-illegalargumentexception-number-of-scaling-constants-does-not-equal-th/5839425#5839425)。 – trashgod 2011-05-25 11:01:58

+0

请参阅['convertToCompatible()'](http://groups.google.com/group/comp.lang.java.help/msg/bf9c8aa1e05d9f24)。 – trashgod 2011-12-24 16:56:58

2

看到的“粉红色”的解释here

基本上将图像保存为ARGB和大多数观众把它解释为CMYK。不过,在Java中打开Alpha时会保留Alpha。