Re: [問題] 一維陣列轉三維陣列 (影像檔)
※ 引述《MiguelC (MC)》之銘言:
可以使用串接式的語法:
struct Printer
{
template<class T>
Printer& print( T const &obj )
{
cout << obj << endl;
return *this;
}
};
仔細看黃底的地方, 這手法的主要精神為「自己就是proxy」, 所
以可以使用下面代碼印出數行到標準輸出流:
Printer().print("hello").print("world").print(2011);
若改而重載 operator[], 程式碼會簡潔許多:
Printer()["hello"]["world"][2011];
以一共計 1 * 2 * 3 chars的圖片來說:
Picture p( 1, 2 );
p[ i ];
物件 p 必須記錄總共跳轉了多少位移, 對上面的程式碼而言, 第
一次呼叫的位移即 i * 2 * 3, 當呼叫情境變成這樣:
p[ i ][ j ];
總位移(第一次+第二次)為: (i * 2 * 3) + (j * 3).
這張圖就變得跟有限狀態機一樣會有轉換的行為, 你只需要確保
使用時都是三個中括號串在一起即可. 接下來還有對每個channel
所做的操作:
p[ 0 ][ 1 ][ 2 ] = 255; // 賦值
cout << p[ 0 ][ 1 ][ 2 ] << endl; // 取值
這意味著還需要重載其他兩個運算子:
operator=() // assignment operator
operator char() // conversion operator
以下是一個簡單的實作(in C++11):
http://codepad.org/Gkb2yovQ
我自己要用的話會把他限制在兩層呼叫, 最後再存取資料成員:
p[ 0 ][ 0 ].red = 255;
cout << p[ 1 ][ 1 ].green << endl;
這個做起來也不難.
--
★ ★ ★ ★
★ ★ ★ ███ ███ █ █▌█ ██◣ ███ ▋▋█ ★ ★ ★
█▂█ █▃█ █ ███ █▆█ █▄█ ███
★ ★ █ ◣ █ █ █ ▋██ █▆◤ ███ ███ ★ ★
Kim Jae Kyung Koh Woo Ri Cho Hyun Young Kim Ji Sook
φwindyhorse No Eul Oh Seung A Jung Yoon Hye
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.197.115
※ 編輯: loveme00835 來自: 140.121.197.115 (09/26 03:49)
→
09/26 12:58, , 1F
09/26 12:58, 1F
推
09/26 13:04, , 2F
09/26 13:04, 2F
討論串 (同標題文章)
完整討論串 (本文為第 3 之 3 篇):