1

我正在使用 SWT 4.2Tree小部件。我需要将颜色代码与TreeItem列表中的每个相关联。我正在使用TreeItem's来执行此操作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 的背景设置为透明但填充的矩形不透明

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

4

1 回答 1

1

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

如果您想了解更多详细信息,请阅读本文:查看 SWT 图像

像这样的东西应该工作:

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);

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

于 2013-03-06T10:04:36.493 回答