如何使用RGB图像绘制矩阵?

4

我想绘制一个 m*n 矩阵,每个元素都是一个 rgb 三元组,就像下面的 gnuplot 代码片段中的 3*3 的 rgb 矩阵:

$cross << EODcross
255 0 0  0 0 0  255 0 0
0   0 0  0 0 0    0 0 0
255 0 0  0 0 0  255 0 0
EODcross

黑色十字架在红色背景上。如果需要,我可以更改列和颜色分量之间的分隔符。

我能否避免使用 set palette rgbformulae i,j,k 直接使用 $cross 数据来实现所需效果?类似这样:

plot '$cross' matrix with image rgb

如果不行的话,我可以传递24位宽的整数(当然,是文本表示形式,即预先计算并转换为文本 r + 256 * (g + 256 * b)b + 256 * (g + 256 * r) 值)。那么,i,j,k三元组应该如何才能正确地将以前述形式表示的rgb值映射到调色板颜色空间中?
2个回答

4

rgbimage 绘图风格需要五列,最后三列给出了在 [0:255] 范围内的红色、蓝色和绿色值。因此您可以使用任何表示颜色的 24 位整数,因为在绘图时必须自己提取颜色通道:

$data <<EOD
0xff   0 0xff00
0      0 0
0xffff 0 0xff00ff
EOD
r(x) = int(x) >> 16
g(x) = (int(x) >> 8) & 0xff
b(x) = int(x) & 0xff
plot $data matrix using 1:2:(r($3)):(g($3)):(b($3)) with rgbimage

enter image description here


什么意思是“first two”? - Tomilov Anatoliy
1
1和2是x和y坐标。当使用matrix时,gnuplot内部生成三列:第一列是矩阵列,第二列是矩阵行,第三列包含实际的矩阵数据值。 - Christoph

2

看起来ASCII矩阵数据和RGB图像不匹配。

如果您可以自由格式化输入数据,那么将图像的每一列放入一个单独的块中,通过两个空行分隔块,如下所示:

$cross << EODcross
255 0 0  
  0 0 0
255 0 0


0 0 0    
0 0 0    
0 0 0


255 0 0  
  0 0 0
255 0 0
EODcross

然后像这样绘制十字形:

plot $cross using -2:0:1:2:3 with rgbimage

using部分,数字-2和0对应于伪列“块索引”和“块内行数”,分别用作x和y值。 plot with rgbimage样式需要x,y,r,g,b数据。
这是结果: 黑色十字

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接