如何用 rgb 图像绘制矩阵?

How to plot matrix with rgb image?

我想绘制 m*n 矩阵,其中的每个元素都是一个 rgb 三元组,如以下 gnuplot 代码片段(rgb 矩阵3*3):

$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 值映射到调色板颜色 space?

似乎ascii矩阵数据和rgbimage不适合在一起。

如果您可以随意格式化输入数据,则将图像的每一列放入一个块中,用两个空行分隔块,如下所示:

$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分别对应伪列"block index"和"line within a block"。它们用作 x 和 y 值。 plot with rgbimage 样式需要 x,y,r,g,b 数据。

这是结果:

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()):(g()):(b()) with rgbimage