使用 ImageData 和高斯模糊在 SWT 中创建阴影图像

Creating shadow image in SWT using ImageData and Gaussian blur

提问人:Kuba 提问时间:10/8/2023 更新时间:10/8/2023 访问量:20

问:

我正在尝试在 SWT 中以编程方式创建阴影背景图像以模仿材质阴影。我认为最好的方法是创建空的透明图像,并使用 GC 在其上绘制黑色圆角矩形,并对其进行一些高斯模糊。

我正在努力解决矩形圆角的透明度问题。

ImageLoader saver = new ImageLoader();
int width = 140;
int height = 140;
// create empty image
Image src = new Image(null, width, height);

// use GC to draw shape
GC gc = new GC(src);
gc.setAntialias(SWT.ON);
gc.setAlpha(0);
gc.fillRectangle(0, 0, width, height);
gc.setAlpha(255);
gc.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_BLACK));
gc.fillRoundRectangle(20, 20, 100, 100, 22, 22);
gc.dispose();

ImageData imageData = src.getImageData();
imageData.transparentPixel = imageData.getPixel(0, 0);

Image dest = new Image(null, imageData);
saver.data = new ImageData[] {dest.getImageData()};
saver.save("result", SWT.IMAGE_PNG);

这是运行我的代码的结果:

result使用 Nebula/Opal 项目 https://github.com/lcaron/opal/blob/master/src/main/java/org/mihalis/opal/utils/SWTGraphicUtil.java 中的代码添加模糊后,我得到了如下内容:

enter image description here

如何去除白色的边缘和角落,如何为图像添加适当的透明度?

图像 SWT 透明度

评论

0赞 greg-449 10/8/2023
您可以在 中设置数组以指定每个像素的透明度alphaDataImageData
0赞 Kuba 10/9/2023
有没有办法使用透明抗锯齿使用 gc 进行绘制,而无需计算每个像素的 alpha 值?
0赞 greg-449 10/9/2023
我不知道。

答: 暂无答案