当前位置: 首页 > 面试题库 >

BufferedImage颜色变化

金承嗣
2023-03-14
问题内容

我正在开发一个捕获屏幕快照并从捕获的图像创建视频的应用程序。但是问题在于,当生成视频时,生成的视频中的颜色非常粉红色。我认为这是因为我正在使用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,然后设置每个像素的随机颜色。 在大约25%到30%的像素中会发生奇怪的行为,我在其中设置颜色,然后立即设置颜色,使其与之前设置的值不同。我是否以错误的方式设置颜色? 问题答案: 这是您的解决方案:禁止getRGB并使用Raster(比getRGB更快,更容易)或更好的DataBuffer(最快,但必须处理编码): 在您的情况下,g

  • 问题内容: 所以我有一个带有火山的图像文件。其他所有内容均为0xFFFF00FF(不透明的洋红色)。我想将包含该颜色的每个像素替换为0(透明)。到目前为止,我的方法如下所示: 这工作正常,但似乎很慢。我见过有人以其他方式执行此操作,但是我不知道发生了什么。如果有人知道更好的方法,我非常想听听。 问题答案: 为了避免遍历像素,请更改基础ColorModel。这是一个例子。以下是作者使用原始Buffe

  • 问题内容: 我需要创建一个具有指定背景颜色的矩形,在背景上绘制一些图案并将其保存到文件中。我不知道如何创建背景。 我正在使用嵌套循环: 但是,当图像较大时,速度非常慢。 如何以更有效的方式设置颜色? 问题答案: 获取图像的图形对象,将当前绘画设置为所需的颜色,然后调用。

  • 问题内容: 该方法返回单个int。如何分别获得红色,绿色和蓝色作为0到255之间的值? 问题答案: Java的Color类可以进行转换:

  • 问题内容: 特别是我的图像在透明的情况下都是纯黑色的。我想在绘制图像时为图像分配简单的颜色,以便将黑色区域更改为新颜色。 我尝试使用仅返回所需颜色的RGBImageFilter,但出现了问题,根本没有绘制任何内容。(ColourFilter扩展了RGBImageFilter,并仅在其filterRGB()方法中返回设置的颜色。) 问题答案: 查看AlphaComposites,尤其是DST_IN: