每兩個Bytes存一個值的問題 |
答題得分者是:justdo
|
kimogi
一般會員 發表:18 回覆:10 積分:5 註冊:2005-07-11 發送簡訊給我 |
請問一下~今天我要讀一張raw data的灰階圖,256*256共65536Bytes,但我要把它存成每2個Bytes放一個像素質,所以想說用short去存到時寫入就是兩個Bytes存一個值,但是存出來結果用PSpad打開看還是依樣一個Bytes存一個值,所以不知道程式哪裡有錯,請指教~謝謝^^
TMemoryStream *msSrc = new TMemoryStream(); if(OpenDialog1->Execute()) { msSrc->LoadFromFile(OpenDialog1->FileName);//讀一張raw data的灰階圖,256*256共65536Bytes } short *BmpData = new short[65536]; msSrc->Read(BmpData, 65536); write->Write(BmpData, 65536); delete msSrc; write->SaveToFile(DBEdit7->Text ".dat"); |
justdo
高階會員 發表:2 回覆:359 積分:222 註冊:2004-08-17 發送簡訊給我 |
TMemoryStream 類別的 Read跟Write函式並不管第一個參數的型態為何,
只管從這個指標開始,處理第二個參數所標示的數量 故 Read(BmpData, 65536) 表示從 MemorySream 讀出 65536 bytes 到BmpData 你的作法應該要是
1.建立大小為65536的unsigned char陣列和unsigned short陣列
2.讀入資料到unsigned char陣列
3.將unsigned char陣列的值,一個一個assign到unsigned short陣列
4.將unsigned short陣列寫回檔案,記得大小為65536*sizeof(unsigned short) ps:其實還要考慮unsigned short是否真為2bytes.. 不過基本上大部分complier都這樣定義,所以就暫且不用擔心這件事了
|
kimogi
一般會員 發表:18 回覆:10 積分:5 註冊:2005-07-11 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |