【问题标题】:Transparent System Tray Icon on OSX with SWT带有 SWT 的 OSX 上的透明系统托盘图标
【发布时间】:2014-10-09 11:04:28
【问题描述】:

我真的很困惑,我不知道它是否是一个错误。

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

图标有 2 种颜色,#00000 为背景,并在其上设置 alpha,然后 #010101 为实际图标。

这是一个图标示例:

它在栏上的显示方式如下:

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

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

更新 2:

从头开始

【问题讨论】:

  • 尝试使用 Alpha 通道保存它,而不仅仅是 Alpha 颜色。
  • 它有一个。包括显示层和通道的图像。

标签: java macos swt system-tray


【解决方案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 没有。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-11
    相关资源
    最近更新 更多