Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 合并SWT图像_Java_Image_Swt - Fatal编程技术网

Java 合并SWT图像

Java 合并SWT图像,java,image,swt,Java,Image,Swt,我需要在Java中合并/组合两个SWT图像 不幸的是,我对结果图像的着色有问题,并且结果图像不像原来的两幅图像那样具有透明度 我不是图像专家,但我认为结果ImageData的PaletteData会以某种方式影响复制的第二幅图像的复制像素的颜色和透明度 ImageData targetData = new ImageData(sourceData1.width + sourceData2.width, sourceData1.height, sourceData1.depth, sourceDa

我需要在Java中合并/组合两个SWT图像

不幸的是,我对结果图像的着色有问题,并且结果图像不像原来的两幅图像那样具有透明度

我不是图像专家,但我认为结果ImageData的PaletteData会以某种方式影响复制的第二幅图像的复制像素的颜色和透明度

ImageData targetData = new ImageData(sourceData1.width + sourceData2.width,
sourceData1.height, sourceData1.depth, sourceData1.palette);
将SourceData1.palette更改为SourceData2.palette将影响第一幅图像复制像素的颜色

完整代码可在以下位置找到:

我试图在处理图像像素之前更改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图像,而不是保存到文件中,结果是一样的


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

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

JFace
CompositeImageDescriptor
有用于合并图像的代码。感谢您的评论,我没有使用这个类。我发现使用OverlayIcon类更容易。我将保留这个问题,因为我的创建并没有真正解决图像合并问题(颜色和透明度),我不想给人留下我解决了上述问题的错误印象
    OverlayIcon resultIcon = new OverlayIcon(BaseIconDescriptor, iconDecorationDescriptor, new Point(16, 16));   
    swt.graphics.Image icon = resultIcon.createImage();