2013年1月17日 星期四

[Color]小心使用HSV(副標: 用HSV為轉換顏色的基礎很危險)

在描述色彩的上, 最常用的標示法為 RGB 與 HSV.

在Android系統上, 有Color這個class可以幫忙轉換與取得所需的色彩資訊.

其中
  色彩值(color)為整數(int)
  RGB的值均為整數(int)     範圍均為 [0:255]
  HSV為浮點數(float)        範圍H:[0.0F : 360.0F]   S[0.0F : 1.0F]   V[0.0F : 1.0F]

假定, 今天具有RGB的值, 則可利用
             int color = Color.rgb(red, green, blue) 來取得對應的顏色.

假定, 今天具有HSV的值, 則可利用
            int color = Color.HSVToColor(hsv) 來取得對應的顏色.

相反的, 如果今天給定color值, 則可利用

               int red = Color.red(color)
               int green = Color.green(color)
               int blue = Color.blue(color)
    來取得RGB值

亦可利用  Color.colorToHSV(color, hsv) 來將顏色轉換成 hsv.

但因為hsv為浮點數, 所以若將由 color1 轉換成的hsv值在轉換為color2時.
由於其運算會由浮點數再度轉換為整數. 中間可能會有精準度的問題而使得color1不等於color2.

故, 若有顏色轉換上的需求, 盡可能不要用hsv轉為color, 而只要進行color轉向hsv的單向工程. 至於color的來源可藉由同是整數的RGB轉換得來, 或直接使用16進位法的整數表示式即可.(同樣在整數的轉換中, 精準度不會因為轉換而失去)


沒有留言:

張貼留言