【问题标题】:Merge SWT images合并 SWT 图像
【发布时间】: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 类更容易。

标签: java image swt


【解决方案1】:

因为合并的目的是为了装饰图标。
我能够使用此代码执行合并:

    OverlayIcon resultIcon = new OverlayIcon(BaseIconDescriptor, iconDecorationDescriptor, new Point(16, 16));   
    swt.graphics.Image icon = resultIcon.createImage();

【讨论】:

  • 我会留下这个问题,因为我的成立并没有真正解决图像合并问题(颜色和透明度),我不想给人一种我解决了上述问题的错误印象跨度>
猜你喜欢
  • 2020-10-24
  • 1970-01-01
  • 2011-10-18
  • 1970-01-01
  • 1970-01-01
  • 2015-09-13
  • 2011-07-28
  • 2011-08-21
  • 2015-11-11
相关资源
最近更新 更多