我在将带有一些透明像素的彩色图像转换为灰度时遇到问题。我已经在该网站上搜索并找到了相关问题,但我无法用来解决我的问题。
我定义了一个方法“convertType”,如下所示:
/*------------------------------
attempts to convert the type of the image argument to the chosen type
for example: BufferedImage newImage= ImageUtilities.convertType(oldImage, BufferedImage.TYPE_3BYTE_BGR);
11/28/2013 WARNING-it remains to be seen how well this method will work for various type conversions
------------------------------*/
public static BufferedImage convertType (BufferedImage image,int newType){
if (image.getType() == newType){
return (image);
}else {
int w= image.getWidth();
int h= image.getHeight ();
BufferedImage modifiedImage = new BufferedImage( w,h,newType);
Graphics2D g = ( Graphics2D)modifiedImage.getGraphics();
g.drawImage( image, null, 0,0);
g.dispose();
return (modifiedImage);
}
}
我从 BufferedImage 类型开始TYPE_4BYTE_ABGR
命名为“结果”,然后:
result= convertType (result, BufferedImage.TYPE_BYTE_GRAY);//transparency is lost
result=convertType (result, BufferedImage.TYPE_INT_ARGB);//pixels will now support transparency
对于原始图像中的彩色不透明像素,上述序列工作正常:
例如,(32, 51, 81, 255)-> (49, 49, 49, 255)
然而,原始图像中的透明像素变成不透明:
例如,(0, 0, 0, 0)-> (0, 0, 0, 255)
我明白发生了什么,如果我可以利用用于转换为灰度的 Java 算法,我就可以解决这个问题。我已经下载了源代码并四处查看,但无法找到该算法。如果有人可以:我将不胜感激:
- 告诉我哪个类包含灰度转换算法或
- 建议一种替代方法来完成我正在尝试做的事情。