Java 缓冲图像红色遮罩
我必须拍摄桌面上某个区域的截图。 我是这样做的:Java 缓冲图像红色遮罩,java,Java,我必须拍摄桌面上某个区域的截图。 我是这样做的: BufferedImage image = new Robot().createScreenCapture(area.areaRect); ImageIO.write(image, "jpg", new File(current)); //then I paint in on JPanel 保存到.jpg的每个屏幕截图如下所示: PNG和GIF不会发生这种情况 我在谷歌上搜索了这个问题,找到了一个解决方案,通过Toolkit类创建图像: Im
BufferedImage image = new Robot().createScreenCapture(area.areaRect);
ImageIO.write(image, "jpg", new File(current));
//then I paint in on JPanel
保存到.jpg的每个屏幕截图如下所示:
PNG和GIF不会发生这种情况
我在谷歌上搜索了这个问题,找到了一个解决方案,通过Toolkit类创建图像:
Image toolkitImage = Toolkit.getDefaultToolkit().createImage(imageUrl);
但是我不知道如何使用它拍摄屏幕截图。在编写文件时,
ImageIO
中的JPEG编写器不考虑ColorModel
,因为JPEG没有alpha通道。Alpha通道是指定每个像素透明度值的ARGB
的A
部分。因为这是标准行为
ImageIO
中的作者将编写一个颜色发生变化的文件,就像图片中可爱的鲑鱼色作为背景一样。这是因为编写器在实际应该在RBG中写入值时,会将值写错
解决方法是使用RBG作为ColorModel将图像绘制到BuffereImage。以下是一些:
它如何寻找PNG和GIF?屏幕截图到底出了什么问题?只是猜测,但我想说的是背景是可爱的鲑鱼色而不是白色。PNG和GIF都不错,没有问题。jpg像这样是红色的我猜CreateScreateScreenCapture制作了一个ARBG图像,并直接保存到jpg,而不指定颜色类型,这将导致像图中所示的那样的时髦颜色。这是一个JPEG编写器如何解释图像的alpha值的错误。尝试使用支持alpha透明度的格式,或者在保存之前将图像绘制为非透明缓冲图像。。。
// argbBuffer is the ARGB Image that should be written as JPEG:
WritableRaster raster = argbBuffer.getRaster();
WritableRaster newRaster = raster.createWritableChild(0, 0, width, height, 0, 0, new int[] {0, 1, 2});
// create a ColorModel that represents the one of the ARGB except the alpha channel:
DirectColorModel cm = (DirectColorModel)argbBuffer.getColorModel();
DirectColorModel newCM = new DirectColorModel(cm.getPixelSize(),
cm.getRedMask(), cm.getGreenMask(), cm.getBlueMask());
// now create the new buffer that is used ot write the image:
BufferedImage rgbBuffer = new BufferedImage(newCM, newRaster, false, null);