【发布时间】:2016-07-04 14:25:18
【问题描述】:
正如标题所说。
我尝试确定给定的图像文件是否具有透明度(非不透明)。
这是正确的方法吗:
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 通道更好的方法(使用我制作的循环)?也许一种甚至不需要将整个图像文件解码为解码的大位图的方法?
【问题讨论】:
-
您可能还需要查看
maskData中的透明度掩码数据。 -
@greg-449 它是如何使用的?无论如何,如果它不为空,是否意味着它具有 alpha?我认为这只是图像的附加元数据,显示它的一个小版本,不是吗?所以我认为不需要检查。
-
不,它似乎是一个位掩码,主图像中每像素一个位,其中 1 位表示 alpha 为 255,0 表示 alpha 0。通常通过调用 ImageData.getTransparencyMask 使用跨度>
-
@greg-449 你确定吗?根据这个:help.eclipse.org/juno/…,它说它是一个图标:“一个包含来自图标掩码的数据的特定于图标的字段。” .另外,如果它是主图像,“alphaData”是什么?好像是alpha像素的确切含义,每个alpha对应一个像素……
-
@greg-449 也许“图标”适用于特定的文件格式?但是为什么要这样做呢?为了节省比特?每个位都有一个像素:不透明/透明?
标签: java image swt transparency alpha