2017-02-02 180 views
2

我要绘制m*n矩阵,其中的每个元素是一个rgb三重,如以下gnuplot的代码段(的3*3 RGB矩阵):如何用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

rgbimage绘图样式预计五列,近三年给的范围是[0:255]红色,蓝色和绿色的值。

$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

+0

拿什么前两个:所以,你可以绘制时使用的颜色的任何24位整数表示,因为你必须提取自己的颜色通道? – Orient

+1

1和2是x和y坐标。当使用'矩阵'时,gnuplot在内部产生三列:第一列是矩阵列,第二列是矩阵列,第三列包含实际的矩阵数据值 – Christoph

1

看来,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对应于伪列分别为“嵌段指数”和“一个块内的行”。它们用作x和y值。 plot with rgbimage风格需要x,y,r,g,b数据。

这是结果:

black cross