2014-10-09 78 views
0

我真的很困惑,我不知道它是否有錯誤。與SWT OSX上的透明系統托盤圖標

在我的SWT應用程序中,我創建了系統托盤圖標。它顯示得很好,但透明度被忽略。該圖標以PNG格式存儲,並在OSX上的預覽中查看它顯示透明度存在,但是當它出現在紙盒上時,它具有白色背景。

該圖標爲2種顏色,#00000爲背景,alpha設置爲該值,然後#010101爲實際圖標。

這裏是圖標的例子:From file

這裏是如何出現在欄上:In use

我已經與實際顏色其它圖標在他們的工作,並有適當的透明度,所以我不禁想知道,這是一些渲染錯誤還是Mac處理系統托盤圖標的一些奇怪之處?

更新:信道和層:http://i.imgur.com/YZNUnXt.png

更新2:

從頭開始

+0

嘗試使用Alpha通道保存它,而不僅僅是Alpha顏色。 – whiskeyspider 2014-10-09 13:31:59

+0

它有一個。包括顯示圖層和頻道的圖像。 – Jeremy 2014-10-09 20:59:24

回答

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沒有。