java - 如何在SWT中使用圆角填充矩形实现透明度?

标签 java graphics swt

我正在使用 SWT 4.2 Tree 小部件。我需要将颜色代码与列表中的每个 TreeItem 相关联。我使用 TreeItemsetImage(...) 来执行此操作,并按如下方式创建图像:

private Image createImage(int imageSize)
{
    Image image = new Image(Display.getDefault(), imageSize, imageSize);
    GC gc = new GC(image);
    gc.setAntialias(SWT.ON);
    gc.setBackground(... a Color object ...);
    gc.fillRoundRectangle(0, 0, imageSize, imageSize, 5, 5);
    gc.dispose();
    return image;
}

这实际上效果很好,除了一个细节:圆角矩形外部的角不是透明的 - 它们保持白色。效果是带有白色边缘的圆形彩色正方形。当用户选择Tree中的项目时,这一点尤其明显,因为选择颜色使白色角非常明显。

在创建 GC 之前,我尝试过使用 Image.setBackground(...),因为该方法的文档指出:“设置要映射透明像素的颜色”。但是,据我所知,将颜色设置为白色或设置图像的 TreeItem 的颜色(无论如何,它恰好是白色)没有任何效果。我还尝试在上面的代码中设置 GC 的 alpha 值,但似乎无法获得正确的咒语来将 GC 的背景设置为透明,但填充的矩形是透明的。

我做错了什么?如何使填充矩形外部的区域透明,以便填充圆角矩形外部的图像角在出现在 Tree 列表中时正确透明?

最佳答案

您可以执行“颜色到 Alpha/透明度”之类的操作,许多照片编辑工具都可以执行此操作:

如果您想了解更多详细信息,请阅读本文:Taking a look at SWT Images

这样的事情应该有效:

ImageData data = yourImage.getImageData();
// Assuming the corners are white
int whitePixel = data.palette.getPixel(new RGB(255,255,255));
data.transparentPixel = whitePixel;
Image transparentImageCorners = new Image(display, data);

如果您担心这可能会影响您绘制的图像中包含的颜色,请首先使用您知道图像中不包含的独特颜色为背景着色。

关于java - 如何在SWT中使用圆角填充矩形实现透明度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15236861/

相关文章:

Java名称解析库?

swift - 使用 Core Image Kernel Language 将 RGB 颜色转换为 HSL

java - 如何在Eclipse中编写基于SWT的GUI插件?

Java 7 更新 45 破坏了我的 Web Start SWT 应用程序

javascript - 是什么阻止 HtmlUnit 加载 PSN 商店页面?

java - Web应用程序中的配置参数(Java+Spring+Hibernate+Tapestry)

java - 寻找 JDOM2 XPath 示例

matlab - 'yyaxis' 轴属性的行为

java - 反转 Java Graphics2D 缩放和旋转坐标

java - 使用 JFace 的不可调整大小的窗口