From b6b55bf4f16eb77560a5abe85176649ed7adfcb0 Mon Sep 17 00:00:00 2001 From: Jonathan Meier Date: Sat, 12 Feb 2022 14:25:55 +0100 Subject: [PATCH] SnippetDrawAlphaTwoPass padding fix --- .../tests/manual/SnippetDrawAlphaTwoPass.java | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) 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 bd0e0373be..525d1a21fa 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 @@ public class SnippetDrawAlphaTwoPass { 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,11 @@ public class SnippetDrawAlphaTwoPass { 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 +139,20 @@ public class SnippetDrawAlphaTwoPass { 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 -- 2.35.1.windows.2