我有一個形象,這是一個典型的Array2D:如何在C++中調整圖像大小?
template<class T = uint8_t>
Array2D<T> mPixData[4]; ///< 3 component channels + alpha channel.
的評論是在庫中。我沒有解釋的線索。
會有人:
解釋什麼是3分量渠道+ Alpha通道即將
顯示我怎麼能調整基礎上,mPixData
我有一個形象,這是一個典型的Array2D:如何在C++中調整圖像大小?
template<class T = uint8_t>
Array2D<T> mPixData[4]; ///< 3 component channels + alpha channel.
的評論是在庫中。我沒有解釋的線索。
會有人:
解釋什麼是3分量渠道+ Alpha通道即將
顯示我怎麼能調整基礎上,mPixData
這個圖像,而不知道這是什麼圖書館,這裏是在黑暗中刺:
類型定義意味着它正在創建無符號字符的2D陣列(允許你值存儲多達255
template<class T = uint8_t> Array2D<T>
然後,mPixData本身的陣列,這意味着在每個座標,你有四個值(字節來抗衡),3個顏色(比方說RGB,但可能是別的東西)和1個阿爾法。
「圖像」基本上就是這個三維數組。大概在加載東西時,它會調整輸入大小 - 你需要做的是找到某種形式的調整算法(我自己不是一個圖像處理專家,但肯定谷歌會透露一些東西),這將允許你採取這個數據並且做你需要的...
1)3分量通道 - 紅綠藍通道。 alpha通道講述圖像透明度
2)有許多算法可用於調整圖像大小。最簡單的方法是丟棄額外的像素。另一個簡單的方法是插值
3分量通道代表紅綠藍(aka RGB)通道。第四頻道ALPHA是透明頻道。 [4]
甲像素由mPixData[4]
mPixData[0] -> R
mPixData[1] -> G
mPixData[2] -> B
mPixData[3] -> A
因此定義,圖像可被表示爲mPixData的載體或陣列。正如你已經說過的,在這種情況下是Array2D<T> mPixData[4];
Resize/rescale/resample an image不是一個微不足道的過程。網上有很多關於它的資料,我認爲你應該考慮用圖書館來做到這一點。檢查CxImage(Windows/Linux)。
有一些代碼here但我沒有測試過它。檢查resample()函數。
嗨3頻道是rgb + alpha通道。所以紅綠藍通道和alpha通道。有幾種縮減方法。例如,您可以每4個像素取一個像素,但結果看起來相當糟糕,請查看不同的插值方法,例如:http://en.wikipedia.org/wiki/Bilinear_interpolation。
或者,如果你想使用一個庫中使用:http://www.imagemagick.org/Magick++/
或由karlphillip提到: http://www.xdp.it/cximage.htm
當調整圖像大小,你應該記住這一點,如果你的應用需要它:HTTP:/ /www.4p8.com/eric.brasseur/gamma.html – bjoernz 2010-10-30 21:13:07