線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:5306
推到 Plurk!
推到 Facebook!

如何將圖片轉hex 檔

 
bt815
一般會員


發表:5
回覆:4
積分:1
註冊:2006-10-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-10-11 15:04:08 IP:60.248.xxx.xxx 訂閱
各位先進好,
我想請問一下我該如何把圖片(.bmp)轉成hex file
我原本以為是直接取每個pixel的值,
再用write file的方式,設定檔案為.hex就好了,
可是發現不是這麼回事,
希望各位先進可以解答我的疑問,
謝謝!
如果有違版規的話,請多多見諒
justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-10-11 21:59:57 IP:59.105.xxx.xxx 未訂閱
把你完整的程式碼貼出來看吧.. 你是怎麼開啟.bmp檔?怎麼讀取資料?怎麼開.hex檔?怎麼寫入資料?
bt815
一般會員


發表:5
回覆:4
積分:1
註冊:2006-10-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-10-12 09:34:15 IP:60.248.xxx.xxx 訂閱
不好意思唷~這裏附上我的程式
===================================================
以下是開啟.bmp檔的程式
void __fastcall TForm1::LoadClick(TObject *Sender)
{

if(OpenPictureDialog1->Execute())
{
bmp = OpenPictureDialog1->FileName;

Image1->Picture->LoadFromFile(bmp);
S1 = bmp.LowerCase();
width1 = Image1->Picture->Width;
height1 = Image1->Picture->Height;

}
}
=======================================================================
以下為轉換及存檔成.hex檔的程式碼,轉換的部份先只取RGB中的R值,
且在saveDialog1->filter 設定存檔為.hex


void __fastcall TForm1::mode_RClick(TObject *Sender)
{
COLORREF color;
int R_byte;
AnsiString R_tmp , memo_Line;

for(int i = 0; i< height1; i )
{
for(int j =0 ; j< width1; j )
{
color = Image1->Canvas->Pixels[j][i];
R_byte = (GetBValue(color));
R_tmp = (IntToHex)(R_byte,2);
memo_Line = memo_Line R_tmp;
}
}
Memo1->Lines->Append(memo_Line);
if(SaveDialog1->Execute())
{
Memo1->Lines->SaveToFile(SaveDialog1->FileName);
}
}
但是存檔後的hex file不是我所要的,
麻煩請各位幫我解答我的疑問,謝謝

justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-10-12 23:35:42 IP:59.105.xxx.xxx 未訂閱
跑起來並沒有問題呀,唯二的問題是你呼叫GetBValue()取得的資料是blue channel的資料,還有程式跑太慢了,有兩個改善的方法,一是取得pixel的方法改用ScanLine、二是儲存過程中產生的資料時,存個一行就把資料寫到檔案去,因為影像大的時候,系統要不斷的擴充該字串變數的大小,這是很耗時的
bt815
一般會員


發表:5
回覆:4
積分:1
註冊:2006-10-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2006-10-13 01:10:39 IP:61.230.xxx.xxx 訂閱

===================引 用 文 章===================
跑起來並沒有問題呀,唯二的問題是你呼叫GetBValue()取得的資料是blue channel的資料,還有程式跑太慢了,有兩個改善的方法,一是取得pixel的方法改用ScanLine、二是儲存過程中產生的資料時,存個一行就把資料寫到檔案去,因為影像大的時候,系統要不斷的擴充該字串變數的大小,這是很耗時的

不好意思唷~我知道程式跑得過,然後bvalue那裡是筆誤 ^^" 不好意思
我的問題是 我希望我輸出儲存的檔案格式應該要類似這個網頁所說得這樣
http://www.keil.com/support/docs/1584.htm
但是存檔格式卻不如我預期的,
大大所指教的效能問題,很謝謝您給我意見,
這也是我所遇到的問題 我會來試試看,謝謝您
也希望知道hex file該怎麼寫的各位先進,可以給我指教


justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#6 引用回覆 回覆 發表時間:2006-10-14 01:31:18 IP:59.105.xxx.xxx 未訂閱
呃..  原來hex是intel訂的一種檔案格式...   這在問題裡要先說明,不是每個人都知道這件事

另外,你根本沒有照他的說明來產生資料,結果當然不一樣
像是 :llaaaatt[dd...]cc

應該先輸出冒號,再輸出該片段的長度(只有兩bytes,最長只能255個?),接著....,然後放真正的data、最後算chucksum
根本都沒做嘛... 怎麼期望會獲得一樣的結果呢?
bt815
一般會員


發表:5
回覆:4
積分:1
註冊:2006-10-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2006-10-14 15:32:44 IP:61.230.xxx.xxx 訂閱

===================引 用 文 章===================
呃.. 原來hex是intel訂的一種檔案格式... 這在問題裡要先說明,不是每個人都知道這件事

另外,你根本沒有照他的說明來產生資料,結果當然不一樣
像是 :llaaaatt[dd...]cc

應該先輸出冒號,再輸出該片段的長度(只有兩bytes,最長只能255個?),接著....,然後放真正的data、最後算chucksum
根本都沒做嘛... 怎麼期望會獲得一樣的結果呢?

嗯嗯,不好意思 造成大家誤解,
我只是想請問一下C Builder有沒有指令可以做到?
還是真的要自己去寫資料?
justdo
高階會員


發表:2
回覆:359
積分:222
註冊:2004-08-17

發送簡訊給我
#8 引用回覆 回覆 發表時間:2006-10-15 08:53:29 IP:59.105.xxx.xxx 未訂閱
沒有,你得自己寫,不然就得上網找看看,是不是有人寫好了
系統時間:2024-05-04 19:07:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!