2017-02-02 178 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