使用SWT的ImageData,如何判断png,gif,bmp文件是否具有透明度?

时间:2016-03-18 00:28:36

标签: java image swt transparency alpha

正如标题所说。

我尝试确定给定的图像文件是否具有透明度(非不透明)。

这是正确的方法:

public static boolean hasAlpha(ImageData imageData) {
    if (imageData.alpha != -1 || imageData.transparentPixel != -1)
        return true;
    if (imageData.alphaData == null && imageData.maskData == null)
        return false;
    if (imageData.alphaData != null)
        for (int i = 0; i < imageData.alphaData.length; ++i) {
            byte alpha = imageData.alphaData[i];
            if (alpha !=0xFF)
                return true;
        }
    if (imageData.maskData != null)
        for (int i = 0; i < imageData.maskData.length; ++i)
            if (imageData.maskData[i] != 0xFF)
                return true;
    return false;
}

有没有比通过整个alpha通道(使用我制作的循环)更好的方法?也许一种方法甚至没有将整个图像文件解码成解码的大位图?

1 个答案:

答案 0 :(得分:0)

我看到了一些问题。

ImageData.alpha可以设置为255,这意味着完全不透明,只有0-254透明。

ImageData.alphaData对于每个字节,只有255的值是完全不透明的。

ImageData.maskData每个字节的所有位都必须为1,因为掩码是不透明的。

您可能还想要考虑什么?透明&#39;手段。 Alpha值为254表示图像仅略微透明,值为0表示图像根本不可见。