Bug 493455 - fix padding of alpha data in manual test snippet
Alpha data should never be padded (i.e. padding is always 1 byte).
Change-Id: Ifbc6fbbc4a4dc174cc483cecfb64b558c4e10b8a
Reviewed-on: https://git.eclipse.org/r/c/platform/eclipse.platform.swt/+/190741
Tested-by: Andrey Loskutov <loskutov@gmx.de>
Reviewed-by: Andrey Loskutov <loskutov@gmx.de>
diff --git a/tests/org.eclipse.swt.tests/ManualTests/org/eclipse/swt/tests/manual/SnippetDrawAlphaTwoPass.java b/tests/org.eclipse.swt.tests/ManualTests/org/eclipse/swt/tests/manual/SnippetDrawAlphaTwoPass.java
index bd0e037..9e21d13 100644
--- a/tests/org.eclipse.swt.tests/ManualTests/org/eclipse/swt/tests/manual/SnippetDrawAlphaTwoPass.java
+++ b/tests/org.eclipse.swt.tests/ManualTests/org/eclipse/swt/tests/manual/SnippetDrawAlphaTwoPass.java
@@ -77,7 +77,7 @@
ImageData imageMaskData = null;
if (imageData.getTransparencyType() == SWT.TRANSPARENCY_ALPHA) {
- imageMaskData = new ImageData(width, height, 8, ALPHA_PALETTE, imageData.scanlinePad, imageData.alphaData);
+ imageMaskData = new ImageData(width, height, 8, ALPHA_PALETTE, 1, imageData.alphaData);
} else if (imageData.getTransparencyType() == SWT.TRANSPARENCY_PIXEL || imageData.getTransparencyType() == SWT.TRANSPARENCY_MASK) {
ImageData transparencyMaskData = imageData.getTransparencyMask();
imageMaskData = new ImageData(width, height, 1, BW_PALETTE, transparencyMaskData.scanlinePad, transparencyMaskData.data);
@@ -127,7 +127,12 @@
scaledResult.maskPad = scaledResultMaskData.scanlinePad;
scaledResult.maskData = scaledResultMaskData.data;
} else {
- scaledResult.alphaData = scaledResultMaskData.data;
+ byte[] alphaData = scaledResultMaskData.data;
+ if (scaledResultMaskData.scanlinePad != 1) {
+ alphaData = convertPad(scaledResultMaskData.data, scaledResultMaskData.width, scaledResultMaskData.height,
+ scaledResultMaskData.depth, scaledResultMaskData.scanlinePad, 1);
+ }
+ scaledResult.alphaData = alphaData;
}
}
@@ -135,4 +140,20 @@
resultMask.dispose();
return scaledResult;
}
+
+ // copied from ImageData.convertPad as it is not accessible outside the org.eclipse.swt package
+ private static byte[] convertPad(byte[] data, int width, int height, int depth, int pad, int newPad) {
+ if (pad == newPad) return data;
+ int stride = (width * depth + 7) / 8;
+ int bpl = (stride + (pad - 1)) / pad * pad;
+ int newBpl = (stride + (newPad - 1)) / newPad * newPad;
+ byte[] newData = new byte[height * newBpl];
+ int srcIndex = 0, destIndex = 0;
+ for (int y = 0; y < height; y++) {
+ System.arraycopy(data, srcIndex, newData, destIndex, stride);
+ srcIndex += bpl;
+ destIndex += newBpl;
+ }
+ return newData;
+ }
}
\ No newline at end of file