Re: [問題] 一維陣列轉三維陣列 (影像檔)

看板C_and_CPP作者 (高髮箍)時間13年前 (2011/09/26 03:30), 編輯推噓1(101)
留言2則, 1人參與, 最新討論串3/3 (看更多)
※ 引述《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
文章代碼(AID): #1EVu5Xnx (C_and_CPP)
文章代碼(AID): #1EVu5Xnx (C_and_CPP)