gpt4 book ai didi

clojure - 在 Clojure 中给定 r g b 创建一个像素

转载 作者:行者123 更新时间:2023-12-02 04:46:38 26 4
gpt4 key购买 nike

使用 imagez我可以从图像中获取像素作为 [r g b]。使用这个 colour wheel我已经证实这个提取部分几乎可以肯定是有效的。这是执行提取的 imagez 代码:

(defn components-rgb
"Return the RGB components of a colour value, in a 3-element vector of long values"
([^long rgb]
[(bit-shift-right (bit-and rgb 0x00FF0000) 16)
(bit-shift-right (bit-and rgb 0x0000FF00) 8)
(bit-and rgb 0x000000FF)]))

我需要做与这个提取相反的事情。以下是被提取的“颜色值”(或像素)的一些示例:

First pixel: -6700606 (in HEX: FFFFFFFFFF99C1C2)  
Last pixel: -11449516 (in HEX: FFFFFFFFFF514B54)
First as colour: [153 193 194] (in HEX: 99 C1 C2)
Last as colour: [81 75 84] (in HEX: 51 4B 54)

反之则意味着 [153 193 194] 变为 -6700606。这个问题之前已经在 SO 上被问过,例如 here .以下是我的两次尝试,但均无效:

;rgb = 0xFFFF * r + 0xFF * g + b
(defn my-rgb-1 [[r g b]]
(+ (* 0xFFFF r) (* 0xFF g) b))

;int rgb = ((r&0x0ff)<<16)|((g&0x0ff)<<8)|(b&0x0ff);
(defn my-rgb-2 [[r g b]]
(let [red (bit-shift-left 16 (bit-and r 0x0FF))
green (bit-shift-left 8 (bit-and g 0x0FF))
blue (bit-and b 0x0FF)]
(bit-or red green blue)))

image --1--> extracted-pixel --2--> rgb color --3--> to-write-pixel --4--> image

第 1 步和第 2 步有效,但第 3 步无效。如果第 3 步有效,提取像素将与写入像素相同。

imagez 中有一个rgb 函数,但它对我也不起作用。 (作者更新我说这是不应该的。参见 here )。我可能还要补充一点,首先使用 imagez 函数 get-pixel 获取像素(步骤 1),然后是 components-rgb(步骤 2),如上所示。

看看here我在其中概述了步骤。

最佳答案

如果我正确理解您的问题 - 您遇到的问题是:

"First pixel" in hex is i.e 0xFFFFFFFFF99C1C2
you convert it to decimal-rgb via `components-rgb` = [153 193 194]
you re-convert [153 193 194] to int via `rbg` and get
0x99C1C2
which by all means is correct

因为 clojure 默认使用 long 是你唯一需要做的事情是使用 unchecked-intlong 截断为 int,如下所示:

(unchecked-int 0xFFFFFFFFFF99C1C2)
-6700606

这是你想要的 - 对吧?

关于clojure - 在 Clojure 中给定 r g b 创建一个像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32374984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com