【问题标题】:Calculating rgb vals for BufferedImage计算 BufferedImage 的 RGB 值
【发布时间】:2010-03-20 18:16:32
【问题描述】:

我正在使用以下 sn-p 构建一个 32 位整数,以与 BufferedImage 的 setRGB 一起使用


(bit-or (bit-shift-left a 24)
          (bit-or (bit-shift-left r 16)
              (bit-or (bit-shift-left g 8) b)))

在写回颜色后显示错误的颜色是我的逻辑有问题吗?

【问题讨论】:

    标签: clojure bit-manipulation bufferedimage


    【解决方案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
    

    我的袖珍计算器上的数字相同。

    您是否发现有特定的论据会产生不正确的结果?

    也许这不是这个逻辑的错误,而是将值写入/读取到 BufferedImage。

    【讨论】:

    • 我认为问题在我这边,但实际上是图像有问题。
    【解决方案2】:

    我在我的misc.clj 中保留了一个将字节序列转换为数字的 bytes-to-int 函数:

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

    它经常派上用场。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-24
      • 1970-01-01
      • 2021-10-25
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多