全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:840
推到 Plurk!
推到 Facebook!

每兩個Bytes存一個值的問題

答題得分者是:justdo
kimogi
一般會員


發表:18
回覆:10
積分:5
註冊:2005-07-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-05 02:35:01 IP:218.168.xxx.xxx 未訂閱
請問一下~今天我要讀一張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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-05 09:20:34 IP:221.169.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-05 13:50:30 IP:218.168.xxx.xxx 未訂閱
謝謝justdo~可以了~所以我原本的寫法會變成一個short[i]陣列裡存了兩個值~所以才會怎麼寫都是一個Byte存一個值~謝謝
系統時間:2024-04-17 5:57:27
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!