如何在SWT中使用圆角填充矩形进行透明度?

时间:2013-03-06 00:35:48

标签: java graphics swt

我正在使用SWT 4.2 Tree小部件。我需要将颜色代码与列表中的每个TreeItem相关联。我正在使用TreeItem的{​​{1}}执行此操作,其中的图像创建如下:

setImage(...)

实际效果很好,除了一个细节:角落外面圆角矩形不透明 - 它们保持白色。效果是带有白色条纹的圆形颜色方块。当用户选择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之前尝试使用Image.setBackground(...),因为该方法的文档指出:“设置映射透明像素的颜色”。但是,将颜色设置为白色或设置图像的GC的颜色(无论如何恰好是白色)都没有效果,据我所见。我也尝试在上面的代码中设置TreeItem的alpha值,但似乎没有得到正确的咒语将GC的背景设置为透明但是填充的矩形不是透明的。

我做错了什么?如何使填充矩形外部的区域透明,以使填充圆角矩形外的图像角在GC列表中显示时是否正确透明?

1 个答案:

答案 0 :(得分:1)

您可以执行类似“颜色到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);

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