2010-02-03 31 views
4

是否可以在包含alpha組件的屬性文件中指定顏色?當我將一個十六進制數字放在具有alpha通道的屬性文件中時,alpha將被忽略。我注意到decode method of string表示「將字符串轉換爲整數並返回指定的不透明顏色」,並且採用int或十六進制數字的the only single argument constructor也表示它是不透明的顏色。這方面的最佳做法是什麼?通過屬性文件在Java中顯示半透明顏色

我看到的替代品有類似

component.color.red=128 
component.color.green=25 
component.color.blue=54 
component.color.alpha=244 

component.color=128_25_54_244 

,然後手動分手了串入其組成的RGBA組成。這些解決方案對我來說都不是很吸引人。

我記得有一次我看到了另一個屬性項目,我認爲對於swingx來說,它有更好的顏色支持。有人知道那是什麼,它是否可以解決我的問題?

編輯:

正如我在評論的帖子的人說,我想一個解決方案,我可以指定顏色的任何手段,我想在屬性文件(十六進制爲不透明色,半透明符號整數),而不必更改處理解釋顏色的鍵/值對的源代碼。

第二編輯: 我在說的庫是Fuse,它是GUI編程的資源注入框架。

+0

爲了確保我明白了:如果你想設置一個不透明的顏色,要做到這一點: component.color = 0000FF //不透明的藍色 並做半透明的,你想這樣的: component.color = 1996553984 //半透明綠色 正確嗎?你不能以16爲基數存儲一些數據,有些基數爲10的數據,並且期望讀取它們並以相同的方式使用它們。在某些時候,你必須從一個轉換到另一個。 – Kylar

+0

我應該意識到 - 它不能神奇地知道如何處理字符串。 也許我應該保留十六進制RGB格式的所有數字,如果它是透明的,請將它放在十六進制RGBA格式(或ARGB,並不重要)。然後,我將不得不分析字符串,看它是否超過一定的長度;如果它是使用alpha通道,否則不要。 有沒有更好的方法? – I82Much

+0

最簡單的方法是將它們全部存儲爲ARGB,然後您可以解析並直接傳入(如果它是不透明的顏色,則預先填入FF)。 – Kylar

回答

2

最簡單的方法是將它們存儲全部作爲ARGB,那麼你可以解析並直接傳入。(如果它是不透明的顏色,則預先安裝FF)。重新發布的答案:)

2

商店的顏色作爲一個完整的32位int(使用Color.getRGB()),並使用Color(int, true)

重建的顏色這將使它很難手工編輯屬性文件,因爲你會看到像

somecolor = -123875123 

一些更多的樂趣示例代碼瓦特/輸出

public static void main(String[] args) 
{ 
    Color r = Color.red; 
    int ir = r.getRGB(); 
    Color nr = new Color(ir, true); 
    System.out.println(r + ":" + r.getAlpha() + ", " + ir + ", " + nr + ":" + nr.getAlpha()); 

    Color c = new Color(1.0f, 0.5f, 1.0f, 0.5f); 
    int ic = c.getRGB(); 
    Color nc = new Color(ic, true); 
    System.out.println(c + ":" + c.getAlpha() + ", " + ic + ", " + nc + ":" + nc.getAlpha()); 
} 

輸出

java.awt.Color[r=255,g=0,b=0]:255, -65536, java.awt.Color[r=255,g=0,b=0]:255 
java.awt.Color[r=255,g=128,b=255]:128, -2130738945, java.awt.Color[r=255,g=128,b=255]:128 
+0

這種方法的問題是,我不能使用半透明和不透明顏色相同的代碼。例如,如果我將我的顏色指定爲標準不透明顏色FFFFFF,則需要確保我讀取了屬性文件,並使用base 16解析了該字符串。如果我具有半透明顏色,則需要讀取屬性文件,解析字符串使用基數10.我想要一個機制,在任何情況下都是相同的 - 當我更改我的屬性文件時,我不想更改任何源代碼。 – I82Much

+0

如果你使用十六進制指定它們,那將起作用。即:FFFFFFFF爲不透明或77FFFFFF指定半透明。那麼只需使用Color(int,true)ctor。你可以使用一些小技巧來看看是否只有6位數字,只是在前面加上FF。 – Kylar

+0

我遺漏了十六進制轉換部分。在我的應用程序中,我們完全按照Kylar的說法編寫顏色 – basszero

1

那麼Color(int rgb, boolean hasAlpha)構造函數呢。

它說,我會從相同的號碼,這可能爲你工作的α,只記得將它設置爲總是正確的和不透明的顏色使用255

相關問題