請問如何將binary轉image? |
尚未結案
|
blacknew
一般會員 發表:2 回覆:5 積分:1 註冊:2002-12-30 發送簡訊給我 |
請教各位前輩
我有一個binary表示的image的檔案
內容大約是:
00 00 00 00 00 00 00 00 00 00 00 00 00 02 00 04
00 02 00 02 00 08 00 21 .......................
............................................... 其中:
1 pixel 用 2 byte表示
這個image是128 x 128 pixel
請問我要如何將這個檔案轉成正常可秀出的image..?? 謝謝!!!
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
blacknew您好:
下面是我讀取RAW Data影像的萬用程式,您參考看看(依您的需要作修改)
TMemoryStream* ima = new TMemoryStream(); ima->LoadFromFile(檔案名稱); BYTE bBuf=0; for (int i=0;i順心 <>~我也是在學習的階段,所以請您多多見諒與指教~> 發表人 - |
blacknew
一般會員 發表:2 回覆:5 積分:1 註冊:2002-12-30 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
blacknew您好:
我想會造成這樣的現象,主要是因為下面的程式所引起
for (y=0;y<128;y ) { for (x=0;x<128;x ) { color=((256*pixel[count] pixel[count 1]))/16; SetPixel(Image1->Canvas->Handle, x,y,TColor(RGB(color,color,color))); count =2; } }您必須將您的資料正規化至0~255才能將像素打在Image上(顏色分佈才會正確)... 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~> 發表人 - |
blacknew
一般會員 發表:2 回覆:5 積分:1 註冊:2002-12-30 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
MilesWamg
一般會員 發表:18 回覆:37 積分:11 註冊:2003-02-07 發送簡訊給我 |
for (y=0;y<128;y ) { for (x=0;x<128;x ) { color=pixel[count];//如果前一位元組為高八位元 //color=pixel[count 1];//如果後一位元組為高八位元 color=(16*pixel[count] pixel[count 1SetPixel(Image1->Canvas->Handle, x,y,TColor(RGB(color,color,color))); count =2; } }發表人 - MilesWamg 於 2003/07/02 15:07:56 |
blacknew
一般會員 發表:2 回覆:5 積分:1 註冊:2002-12-30 發送簡訊給我 |
|
blacknew
一般會員 發表:2 回覆:5 積分:1 註冊:2002-12-30 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
blacknew您好:
我程式功力沒有那麼厲害< >,可以反推您的資料分佈為何< >
所以是否方便將您的專案與SOURCE(多一點測試檔案)上傳至
http://delphi.ktop.com.tw/forum.asp?FORUM_ID=97
[會員求助程式檔案上傳區]
並說明檔案的格式 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~> 發表人 -
|
MilesWamg
一般會員 發表:18 回覆:37 積分:11 註冊:2003-02-07 發送簡訊給我 |
for (y=0;y<128;y ) { for (x=0;x<128;x ) { color=((256*pixel[count] pixel[count 1]))/256;//此一計算為16bits表示但除上16,故計算會超出255應為除上256!! SetPixel(Image1->Canvas->Handle, x,y,TColor(RGB(color,color,color))); count =2; } }一pixels為2byte 故修正為 color=((256*pixel[count] pixel[count 1]))/256; 或者 為color=pixel[count]; (因為後者經正規化後會消失!!) 請試試看此一方法 發表人 - MilesWamg 於 2003/07/02 15:09:16 |
JerryKuo
版主 發表:42 回覆:571 積分:322 註冊:2003-03-10 發送簡訊給我 |
blacknew你好 下面有兩種情況和解決的方法,參考看看
1.影像是一個pixel兩個byte,可能實際上只用一個值,例如: 00 14
實際上只有14=20,所以你可以讀兩個byte只挑後面值處理就好,秀出來看
就知道,我是覺得很少人會把灰階範圍提升到0~65535。
for (y=0;y<128;y ) { for (x=0;x<128;x ) { color=(byte)pixel[count 1]; SetPixel(Image1->Canvas->Handle, x,y,TColor(RGB(color,color,color))); count =2; } }2.每個像素灰階範圍是0~65535,那就把值正規化(normalize),原程式改成 for (y=0;y<128;y ) { for (x=0;x<128;x ) { color=(byte)((256*pixel[count] pixel[count 1])*256)/65536; SetPixel(Image1->Canvas->Handle, x,y,TColor(RGB(color,color,color))); count =2; } }加號秀不出來..用想像的 |
blacknew
一般會員 發表:2 回覆:5 積分:1 註冊:2002-12-30 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |