Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/ImageData.java26
1 files changed, 22 insertions, 4 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/ImageData.java b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/ImageData.java
index a6781948de..d13ecb1105 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/ImageData.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT/common/org/eclipse/swt/graphics/ImageData.java
@@ -1073,13 +1073,31 @@ public RGB[] getRGBs() {
* @return the transparency mask
*/
public ImageData getTransparencyMask() {
- if (getTransparencyType() == SWT.TRANSPARENCY_MASK) {
- return new ImageData(width, height, 1, bwPalette(), maskPad, maskData);
- } else {
- return colorMaskImage(transparentPixel);
+ int transparencyType = getTransparencyType();
+ switch (transparencyType) {
+ case SWT.TRANSPARENCY_ALPHA: return getTransparencyMaskFromAlphaData();
+ case SWT.TRANSPARENCY_MASK: return new ImageData(width, height, 1, bwPalette(), maskPad, maskData);
+ case SWT.TRANSPARENCY_PIXEL: return colorMaskImage(transparentPixel);
+ default: return colorMaskImage(transparentPixel);
}
}
+ImageData getTransparencyMaskFromAlphaData() {
+ ImageData mask = new ImageData(width, height, 1, bwPalette(), 2, null, 0, null, null, -1, -1, SWT.IMAGE_UNDEFINED, 0, 0, 0, 0);
+ int offset = 0;
+ for (int y = 0; y < height; y++) {
+ for (int x = 0; x < width; x++) {
+ byte a = alphaData[offset++];
+ if (a == 0) {
+ mask.setPixel(x, y, 0);
+ } else {
+ mask.setPixel(x, y, 1);
+ }
+ }
+ }
+ return mask;
+}
+
/**
* Returns the image transparency type, which will be one of
* <code>SWT.TRANSPARENCY_NONE</code>, <code>SWT.TRANSPARENCY_MASK</code>,

Back to the top