2010-09-28 123 views
1

我目前正在製作一個顏色選擇器(非常標準,與當前較少選項的photoshop幾乎相同:仍處於早期階段)。這是實際的東西的圖片:http://i.stack.imgur.com/oEvJW.jpg檢索顏色選擇器上的像素顏色的問題

問題是:檢索顏色選擇器(小的,另一個是鼠標)下的像素的顏色,我有這條線,我認爲會做到這一點:

_currentColor = Convert.hsbToHex(new HSB(0, 
    ((_colorSelector.x + _colorSelector.width/2)*100)/_largeur, 
    ((_colorSelector.y + _colorSelector.height/2)*100)/_hauteur 
)); 

只是爲了澄清的代碼,我簡單地使用選擇的座標,以上的Y軸創建一個新的HSB顏色(飽和度被表示在X軸上和亮度(值)這種顏色選擇器)。然後將此HSB顏色轉換爲十六進制,並將其分配給屬性。現在色相始終設置爲0,但這不相關,因爲我只使用純紅色進行測試。

這部分做什麼,我想,但返回的顏色值反轉的大部分角落: 爲(0,0),它應該返回0XFFFFFF,但它返回0x000000處,而不是 (256,0),這是應該返回爲0xFF0000,但它不是 返回0x000000處爲(0,256),它應該返回0x000000處,但它返回0XFFFFFF代替 爲(256,256),它應該返回0x000000處,但它返回爲0xFF0000,而不是

我在代碼中嘗試了很多變體,但我似乎無法正確修復它。任何回覆/建議都比歡迎!

回答

0

我認爲錯誤(或其中之一)正在使用0..256範圍內的值,這似乎會導致溢出,請嘗試使用0..255來代替。

+0

它在這種情況下並沒有真正改變任何東西,問題實際上是我無法確定的角點值的倒置。 – Sheavi 2010-09-28 23:16:08

+0

在這種情況下,發佈'hsbToHex'的代碼將是唯一的方法來發現錯誤,或者這是一個內置函數? – schnaader 2010-09-28 23:18:48

+0

它是我製作的一個功能,但我已經對它進行了測試,並將其與photoshop的值進行了比較。此外,它只是您日常的轉換算法,您可以在網上找到從HSB到RGB,然後二進制轉換以將RGB轉換爲十六進制。 – Sheavi 2010-09-28 23:24:22

0

假設登記點爲中心,這似乎是因爲你正在做的情況:我覺得你公式應是這個樣子

(_colorSelector.x + _colorSelector.width/2) 

(_colorSelector.x + _colorSelector.width/2)/_colorSelector.width 

如果您的註冊(0,0),應該只是:

(_colorSelector.x/_colorSelector.width); 

上面應該是g你在範圍內的數字0...1

此外,你應該反轉這個值的亮度(因爲低y值代表高亮度和高y值,低亮度;所以亮度沿y軸減小,而沿着x軸飽和度增加)。所以對於你的y軸你應該這樣做:

1 - ((_colorSelector.y + _colorSelector.height/2)/_colorSelector.height) 

(再次假設註冊點居中)。

如果你的轉換函數期望的百分比,那麼你就應該乘以100

(_colorSelector.x + _colorSelector.width/2)/_colorSelector.width * 100 
(1 - ((_colorSelector.y + _colorSelector.height/2)/_colorSelector.height)) * 100 

也許我失去了一些東西,但。我不知道_largeur_hauteur來自哪裏,但它看起來像是寬度和高度。我認爲你應該使用_colorSelector的高度和寬度,但我可能是錯的。

PS:我希望你明白,因爲我沒有編譯上面的代碼,也許我搞砸了一些括號或做了一些其他愚蠢的錯誤。