2010-03-20 42 views
0

計算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使用顯示錯誤的顏色是有我的邏輯故障?

回答

1

你確定你有問題嗎?我嘗試根據您的方法和功能等效的替代方法生成幾個值:

(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的值。

+0

我跳到計算問題是在我身邊,但它實際上是有問題的圖像。 – 2010-03-23 16:44:07

1

我保持一個字節到INT功能字節序列轉換成數在我misc.clj

(defn bytes-to-int [bytes] 
    (let [powers (iterate #(* % 256) 1)] 
     (reduce + 0 (map * bytes powers)))) 

它來得心應手相當頻繁。