主要是想通過color = Color.rgb(red, green, blue),識別出該顏色在哪一大類顏色內。但是:
通過int color = Color.rgb(red, green, blue)得到色值后,色值是一個很大的負數,是溢位嗎?想轉換成# 的色值,根據上面表格的閾值,來判斷是紅色,粉色等這樣一個大類。不知道方法可行不?#開頭的色值好像又不能進行比較,就有點蒙。或者將#開頭的色值轉換為10進制?希望各位大佬,可以給個思路呢?
uj5u.com熱心網友回復:
你可以把得到了color值轉化成16進制,與表比較
uj5u.com熱心網友回復:
先看下Color.rgb的原始碼
@ColorInt
public static int rgb(
@IntRange(from = 0, to = 255) int red,
@IntRange(from = 0, to = 255) int green,
@IntRange(from = 0, to = 255) int blue) {
return 0xff000000 | (red << 16) | (green << 8) | blue;
}
這表示你得到的int color實際上是將原來的16進制表示成了int型的,在計算機原理中,一個顏色有0-255,16進制表示的話占用兩位,二進制表示占用八位。因此三種顏色占用了24位,再加上透明度,則占用了32位。剛好一個Int型的數值也是32位。因此可以把一個RBG顏色表示為int 型。但是注意,int型雖然是32位表示,但是有一位表示為正負,實際上只有32位表示數值。 因此你用Color.rgb()得到的一個Int數值,有可能為一個負數。
uj5u.com熱心網友回復:
參考 2 樓 qq_1113502097 的回復: 先看下Color.rgb的原始碼
@ColorInt
public static int rgb(
@IntRange(from = 0, to = 255) int red,
@IntRange(from = 0, to = 255) int green,
@IntRange(from = 0, to = 255) int blue) {
return 0xff000000 | (red << 16) | (green << 8) | blue;
}
這表示你得到的int color實際上是將原來的16進制表示成了int型的,在計算機原理中,一個顏色有0-255,16進制表示的話占用兩位,二進制表示占用八位。因此三種顏色占用了24位,再加上透明度,則占用了32位。剛好一個Int型的數值也是32位。因此可以把一個RBG顏色表示為int 型。但是注意,int型雖然是32位表示,但是有一位表示為正負,實際上只有32位表示數值。 因此你用Color.rgb()得到的一個Int數值,有可能為一個負數。 修改下 只有31位表示數值
uj5u.com熱心網友回復:
參考 1 樓 不會寫代碼的猴子 的回復: 你可以把得到了color值轉化成16進制,與表比較 好滴這就去試試
uj5u.com熱心網友回復:
參考 3 樓 qq_1113502097 的回復: Quote: 參考 2 樓 qq_1113502097 的回復: 先看下Color.rgb的原始碼
@ColorInt
public static int rgb(
@IntRange(from = 0, to = 255) int red,
@IntRange(from = 0, to = 255) int green,
@IntRange(from = 0, to = 255) int blue) {
return 0xff000000 | (red << 16) | (green << 8) | blue;
}
這表示你得到的int color實際上是將原來的16進制表示成了int型的,在計算機原理中,一個顏色有0-255,16進制表示的話占用兩位,二進制表示占用八位。因此三種顏色占用了24位,再加上透明度,則占用了32位。剛好一個Int型的數值也是32位。因此可以把一個RBG顏色表示為int 型。但是注意,int型雖然是32位表示,但是有一位表示為正負,實際上只有32位表示數值。 因此你用Color.rgb()得到的一個Int數值,有可能為一個負數。 修改下 只有31位表示數值感謝大佬長見識了
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/261160.html
標籤:Android
上一篇:Qt視窗最大化函式showmaximized 失效怎么辦
下一篇:Android向藍牙設備發送檔案資料,需要花費的時間問題