带有SWT的OSX上的透明系统托盘图标

时间:2014-10-09 11:04:28

标签: java macos swt system-tray

我真的对此感到困惑,我无法判断它是否是一个错误。

在我的SWT应用中,我创建了一个系统托盘图标。它显示得很好,但透明度被忽略了。该图标存储为PNG,在OSX上的预览中查看该图标显示透明度在那里,但当它出现在托盘上时,它具有白色背景。

图标为2种颜色,#00000为背景,alpha设置为该颜色,然后#010101为实际图标。

以下是图标的示例:From file

以下是它在条形图上的显示方式:In use

我有其他图标,其中有实际颜色,并且具有适当的透明度,所以我不能帮助但是想知道,这是某种渲染错误还是与Mac处理系统托盘图标的方式有些奇怪?

更新:频道和图层:http://i.imgur.com/YZNUnXt.png

更新2:

划伤

1 个答案:

答案 0 :(得分:1)

我明白了,这是一个脸上的时刻,有点像。

所有徽标都是从我制作的装载程序类加载的。有一种方法可以指定徽标的大小,然后按比例缩小。我最初是在缩放徽标,但在创建新徽标后,它不需要缩放,但我忘了更新该方法调用。

这里有一些代码可以显示正在发生的事情。

public static Image getLogo(LogoType type, Display display, int width, int height) {
    ClassLoader loader = AppLogo.class.getClassLoader();
    InputStream stream = loader.getResourceAsStream(type.getFileName());
    Image img; 

    if(width > 0 && height > 0) {
        Image orig = new Image(display, stream);
        img = new Image(display, width, height);
        GC gc = new GC(img);
        gc.drawImage(orig, 0, 0, orig.getBounds().width, orig.getBounds().height, 0, 0, width, height);
        gc.dispose();
        orig.dispose();
    }
    else {
        img = new Image(display, stream);
    }

    return img;     
}

似乎使用GC缩放图像会导致忽略alpha值。我也尝试在ImageData上设置透明度颜色,但仍然无法正常工作。我已经看到一些人们使用算法进入和缩放的例子,在这种情况下,他们可以实际设置像素并且它可以工作。但是drawImage并没有。