開發平台(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):無
作者: mjchicken (狐狸) 2015-05-19 16:15:00
T大可以再多點給hint嗎 XD我想總共應該就 1 2 4 bytes 三種類別,因為是影像處理用,應該不會比4bytes還多了主要是考慮到演算法用的時候要針對不同type處理比較麻
作者: mjchicken (狐狸) 2015-05-19 16:33:00
感謝A大範例,我附上我剛剛寫到的進度我是想以memcpy的方式直接覆寫Data並且在影像處理時不用因為多加入一組新的type EX:32bit而在每個地方都加上 (int*)char 之類的動作
你在處理每個pixel的時候就會有分1/2/4bytes三種嗎?還是說你都用int去處理每個pixel,只有儲存才分三種後者的情況下你就直接固定每個pixel是int然後在存檔時轉換成1或2 bytes就好
作者: longlongint (華哥爾) 2015-05-19 19:31:00
用openCV (如果可以
bits 數就那幾種的話也可以考慮整理成 enum XD不過如果每張圖的bits數從頭到尾就是固定的話,我會選擇用上面多型的方式寫
作者: anyoiuo 2015-05-21 10:46:00