【发布时间】:2018-11-19 14:14:05
【问题描述】:
在此处查看完整的项目检查 repo。随意克隆和运行。注意测试图像 https://github.com/AshGale/Image2RGBA
当在 GIMP 中读取部分显示为空(散列)的 PNG 时,读入程序的值为 [0,0,0,255](红色、绿色、蓝色、Alpha)。我希望空位具有 Alpha 0,因此完全为空 [0,0,0,0]。但是值是 [0,0,0,255] 女巫也是全黑。
问题,如果像素完全为空,我如何在 java 中检查,即在 gimp 中散列。
我怎样才能将其写入带有缓冲图像的图像文件。
-
如图所示,对于空白图像的 alpha 值是否应该为 0?请建议以文件或文件格式读取的方式。
//代码提取见Git获取完整代码
...
for (int i = 0; i < imageHeight; i++) {
for (int j = 0; j < imageWidth; j++) {
individualPixel = new Color(buffImage.getRGB(j, i));
//TODO find a way to detect a empty pixel an keep perfect black
if(individualPixel.getRed() == 0
&& individualPixel.getGreen() == 0
&& individualPixel.getBlue() ==0
) {
//set pixel at location to empty
buffRed.setRGB(j, i, getIntFromColor(0, 0, 0, 0));
buffGreen.setRGB(j, i, getIntFromColor(0, 0, 0, 0));
buffBlue.setRGB(j, i, getIntFromColor(0, 0, 0, 0));
}else {
// RED
tempPixel = new Color(individualPixel.getRed(), 0, 0, individualPixel.getAlpha());
buffRed.setRGB(j, i, getIntFromColor(tempPixel.getRed(), 0, 0, tempPixel.getAlpha()));
// GREEN
// BLUE
}
...
ImageIO.write(buffRed, "png", redImg);
【问题讨论】:
-
"程序中的红色值是 [0,0,0,255]" - 我假设您的意思是
[255,0,0,255]。 -
"如果像素完全为空,我如何检查 java"-您基本上自己回答了这个问题:"我希望空位具有 Alpha 0"-您只需要从文件并检查其值。
getRGB()方法对您没有帮助,因此请查看getAlphaRaster()等 - 通常情况下,JavaDoc和互联网上的许多教程都是您的朋友(关于如何将该图像写入文件也)。 -
对不起,我的意思是阅读。我会看看 getAlphaRaster() 谢谢。我已经写了一个文件,但添加以防在处理 alpha 时有特殊方式
-
@Thomas 我试过了,但似乎没有帮助。它所做的唯一一件事就是使所有像素的 alpha 值为 0 而不是 255 WritableRaster imageRaster = buffImage.getAlphaRaster();整数 [] 像素 = 新整数 [4];整数阿尔法 = 0; for (int i = 0; i
-
嗯,您在评论中发布的代码很难阅读以发现错误并不容易。假设没有,这可能与读取图像时指定的颜色/像素格式有关。根据文档,默认格式为 ARGB,因此 alpha 通道应位于索引 0。
标签: java image-processing alpha is-empty