看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Delphi XE3 C++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) vcl 問題(Question): 如果想要在runtime時決定資料型態時,除了if/else的寫法外 有沒有其他類型的寫法 餵入的資料(Input): 目前有一組raw的圖形資料,儲存方式有16bits和8bits兩種 如果以case by case的方式處理怕以後不好maintain 目前的想法是用 class ImageData{ public: ImageData(int); char* Data; //原始圖資 void setDataType(int); //設定資料儲存bits數 int getData(int); //讀取第n筆資料 private: int bits; } ImageData::ImageData(int size){ Data = new char[size]; } void ImageData::setDataType(int inputBits){ bits = inputBits; } int getData(int pos){ if (bits == 8) return (int) *(Data + pos); else if (bits == 16) return (int) *((short*)Data + pos); } 的方式實做,這樣會不會也不好maintain或是有其他較佳的方式 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code): 補充說明(Supplement):無 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.165.161.221 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1432018465.A.B99.html
TobyH4cker: 利用檔頭判斷? 05/19 16:07
Frozenmouse: 以後會擴增到幾種?有考慮對每一種寫子類別特化嗎? 05/19 16:13
mjchicken: T大可以再多點給hint嗎 XD 05/19 16:15
mjchicken: 我想總共應該就 1 2 4 bytes 三種類別,因為是影像處理 05/19 16:16
mjchicken: 用,應該不會比4bytes還多了 05/19 16:17
mjchicken: 主要是考慮到演算法用的時候要針對不同type處理比較麻 05/19 16:19
azureblaze: http://ideone.com/WLCsPW 多型 05/19 16:21
※ 編輯: mjchicken (1.165.161.221), 05/19/2015 16:28:37
mjchicken: 感謝A大範例,我附上我剛剛寫到的進度 05/19 16:33
mjchicken: 我是想以memcpy的方式直接覆寫Data 05/19 16:35
mjchicken: 並且在影像處理時不用因為多加入一組新的type EX:32bit 05/19 16:36
mjchicken: 而在每個地方都加上 (int*)char 之類的動作 05/19 16:37
littleshan: 你在處理每個pixel的時候就會有分1/2/4bytes三種嗎? 05/19 17:12
littleshan: 還是說你都用int去處理每個pixel,只有儲存才分三種 05/19 17:13
littleshan: 後者的情況下你就直接固定每個pixel是int 05/19 17:13
littleshan: 然後在存檔時轉換成1或2 bytes就好 05/19 17:14
TobyH4cker: 抱歉這個我不會 05/19 18:00
longlongint: 用openCV (如果可以 05/19 19:31
Frozenmouse: bits 數就那幾種的話也可以考慮整理成 enum XD 05/19 20:55
Frozenmouse: 不過如果每張圖的bits數從頭到尾就是固定的話,我會 05/19 20:58
Frozenmouse: 選擇用上面多型的方式寫 05/19 20:58
anyoiuo: 用Template http://ideone.com/dMMrV9 05/21 10:46
anyoiuo: 更正使用unsigned會合是些 http://ideone.com/J5htXe 05/21 10:56
anyoiuo: "合適"XDD 05/21 10:57