【问题标题】:BufferedImage colour changeBufferedImage 颜色变化
【发布时间】:2011-05-25 10:26:12
【问题描述】:

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

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

谢谢。

【问题讨论】:

    标签: java


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

    见“粉红色”解释here

    基本上,图像保存为 ARGB,大多数观众将其解释为 CMYK。不过,在用 Java 重新打开时,Alpha 会被保留。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-02
      • 2017-03-25
      • 2016-09-25
      • 2018-06-06
      • 1970-01-01
      相关资源
      最近更新 更多