【发布时间】:2014-06-18 12:59:19
【问题描述】:
我需要在 Java 中合并/合并两个 SWT 图像。
不幸的是,我遇到了结果图像着色的问题,并且结果图像不像原始的两个图像那样具有透明度。
我不是图像专家,但我认为结果 ImageData 的 PaletteData 会以某种方式影响复制的第二张图像的复制像素的着色和透明度。
ImageData targetData = new ImageData(sourceData1.width + sourceData2.width,
sourceData1.height, sourceData1.depth, sourceData1.palette);
将 SourceData1.palette 更改为 SourceData2.palette 会影响第一张图像的复制像素的着色。
完整代码见:https://bugs.eclipse.org/bugs/show_bug.cgi?id=153863
我尝试在处理像素之前更改 targetData 的 PaletteData 第二张图片,但这也不起作用。
merge(sourceData1, targetData, sourceData1.x, sourceData1.x, 1);
targetData.palette = sourceData2.palette;
merge(sourceData2, targetData, startX, startY, 1);
还尝试复制每个像素的 Alpha,但效果不佳:
targetData.setAlpha(startX + i, startY + j, sourceData.getAlpha(i, j));
targetData.setPixel(startX + i, startY + j, sourceData.getPixel(i, j));
这里是两个 SWT 图像的示例和结果之一:
第一张 SWT 图片(尺寸 16x16,gif 格式)
第二张 SWT 图片(尺寸 8x16,gif 格式)
结果 SWT 图片:(尺寸 24x16,gif 格式)
注意:
- 虽然两个图像都具有透明度,但结果图像却没有。
- 我尝试将targetData转换为SWT图像而不是保存到文件中,结果是一样的。
Image resultSWTImage = new Image(Display.getCurrent(), targetData);
【问题讨论】:
-
JFace
CompositeImageDescriptor具有合并图像的代码。 -
感谢您的评论,我没有使用这个类。我发现使用 OverlayIcon 类更容易。