計算RGB瓦爾斯我使用下面的代碼片斷建立一個32位整數寫入顏色讀他們回來後的BufferedImage爲BufferedImage的
(bit-or (bit-shift-left a 24)
(bit-or (bit-shift-left r 16)
(bit-or (bit-shift-left g 8) b)))
的setRGB使用顯示錯誤的顏色是有我的邏輯故障?
計算RGB瓦爾斯我使用下面的代碼片斷建立一個32位整數寫入顏色讀他們回來後的BufferedImage爲BufferedImage的
(bit-or (bit-shift-left a 24)
(bit-or (bit-shift-left r 16)
(bit-or (bit-shift-left g 8) b)))
的setRGB使用顯示錯誤的顏色是有我的邏輯故障?
你確定你有問題嗎?我嘗試根據您的方法和功能等效的替代方法生成幾個值:
(defn argbval
[a r g b]
(bit-or (bit-shift-left a 24)
(bit-or (bit-shift-left r 16)
(bit-or (bit-shift-left g 8) b))))
(defn altargbval
[a r g b]
(+ (* 16777216 a) (* 65536 r) (* 256 g) b))
(defn -main
([& args]
(println "(argbval 25 21 23 29): " (argbval 25 21 23 29))
(println "(altargbval 25 21 23 29): " (altargbval 25 21 23 29))
(println "(argbval 0 0 0 0): " (argbval 0 0 0 0))
(println "(altargbval 0 0 0 0): " (altargbval 0 0 0 0))
(println "(argbval 255 255 255 255): " (argbval 255 255 255 255))
(println "(altargbval 255 255 255 255): " (altargbval 255 255 255 255))))
並得到相同的值。
(argbval 25 21 23 29): 420812573
(altargbval 25 21 23 29): 420812573
(argbval 0 0 0 0): 0
(altargbval 0 0 0 0): 0
(argbval 255 255 255 255): 4294967295
(altargbval 255 255 255 255): 4294967295
我在我的口袋caculator上得到了相同的數字。
是否有具體的論點,你看到產生不正確的結果?
也許這不是邏輯上的錯誤,而是寫入/讀取BufferedImage的值。
我保持一個字節到INT功能字節序列轉換成數在我misc.clj:
(defn bytes-to-int [bytes]
(let [powers (iterate #(* % 256) 1)]
(reduce + 0 (map * bytes powers))))
它來得心應手相當頻繁。
我跳到計算問題是在我身邊,但它實際上是有問題的圖像。 – 2010-03-23 16:44:07