如何从BufferedImage的单个像素中检测确切的alpha值

时间:2014-01-11 00:16:28

标签: java graphics colors bufferedimage alpha

这是我在正确的循环中获得的一小段代码,用于从.PNG BufferedImage中的每个像素获取像素颜色数据。

Color pColor = new Color(pixelData[tilePixel], true);

int alpha = pColor.getAlpha();
int red = pColor.getRed();
int green = pColor.getGreen();
int blue = pColor.getBlue();

System.out.println(alpha);

int Pixel = alpha<<24 | red<<16 | green<<8 | blue;

控制台为每个像素打印0,无论photoshop中像素的透明度如何。如果我只是使用java.awt.Graphics中的drawImage()方法来显示图像,透明度显示得很好,所以我知道alpha数据在某处。我只是想弄清楚如何实现它。 (我认为Color()中的布尔值true代表hasAlpha ..?我错了吗?)

ALSO !!如果我像这样手动编辑alpha ..

Color pColor = new Color(pixelData[tilePixel], true);

int alpha = 150;
int red = pColor.getRed();
int green = pColor.getGreen();
int blue = pColor.getBlue();

int Pixel = alpha<<24 | red<<16 | green<<8 | blue;

我的渲染方法可以完全打印整个图像半透明,如果它从图像中获取正确的alpha像素数据,我会想要它。所以很明显,这里的问题是如果alpha被识别为0只有我的渲染方法从不显示任何内容..或显示100%透明图像。仍然不是很有帮助!

我也试过绕过这样的颜色类..

int px = pixelData[tilePixel];
int alpha = (px >> 24) & 0xFF;
int red = (px >> 16) & 0xFF;
int green = (px >> 8) & 0xFF;
int blue = px & 0xFF;

我得到了完全相同的结果。 Alpha打印为0,硬编码alpha在0-255之间的某个值仍然在屏幕上给我一个适当透明的图像,红色/绿色/蓝色仍然按预期识别..

有什么见解?我已经在互联网上搜索了这个问题,我发现了许多透明度方面的问题,但没有任何一个问题符合我的困境。如果我没有在这里发布足够的信息,请告诉我,我可以发布更多代码。 (这是我第一次发布到StackOverflow,所以我不确定我的帖子到底有多详细)提前谢谢。

0 个答案:

没有答案