有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从BuffereImage的单个像素中检测出精确的alpha值

下面是我在适当的循环中使用的一小段代码,用于从一个循环中的每个像素获取像素颜色数据。PNG BuffereImage

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;

无论photoshop中像素的透明度如何,控制台都会为每个像素打印0。如果我只是使用java中的drawImage()方法。awt。显示图像的图形透明度显示得很好,所以我知道alpha数据就在那里的某个地方。我就是不知道该怎么做。(我以为布尔真彩色()代表hasAlpha。。?我错了吗?)

还有!!如果我像这样手动编辑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) 个答案