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

要如何從掃描器掃出的資料存成BMP

尚未結案
KuoWeichung
一般會員


發表:2
回覆:4
積分:1
註冊:2005-05-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-06 11:52:12 IP:211.78.xxx.xxx 未訂閱
我有一部Scanner,掃描時存入掃描器的Buffer是一條一條Scanline存入的 以灰階點陣圖來講,如果將掃到的Buffer使用 imgScan->Canvas->Pixels[piX][piY]=TColor(RGB(hpBuf[i],hpBuf[i],hpBuf[i])); 可以組成正確的BMP圖檔 但是用TImage元件轉存出來的圖檔,原本掃進去300DPI的圖,就縮成96DPI 請問要如何將它轉存成完整的300DPI BMP檔
wyndog
資深會員


發表:7
回覆:362
積分:348
註冊:2004-10-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-06 15:05:23 IP:60.248.xxx.xxx 未訂閱
你好 不是很懂你的意思 是指圖檔會變小? 還是指轉存出來的 BMP 中紀錄的 DPI 為 96?
KuoWeichung
一般會員


發表:2
回覆:4
積分:1
註冊:2005-05-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-07 10:09:34 IP:211.78.xxx.xxx 未訂閱
我下給Scanner的命令是300DPI 但是透過TImage元件轉存出來的BMP圖檔 長、寬不變,但是DPI就不是300DPI了 只剩下96DPI
wyndog
資深會員


發表:7
回覆:362
積分:348
註冊:2004-10-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-07 11:58:38 IP:60.248.xxx.xxx 未訂閱
我查了一下 TBitmap 似乎沒有提供修改 DPI 的 Method 不過,也沒關係,反正,我們還是可以去動 BMP 檔    這裡可以查到 BMP 的檔案格式 http://astronomy.swin.edu.au/~pbourke/dataformats/bmp/ 解析度是底下這行,要注意的是要換算成 DPI int xresolution,yresolution;     /* Pixels per meter */    如果懶得看的話,幫你寫好了,照抄就行了
procedure SetBMPDPI(FileName: string; DPI: integer);
var
  iDPM: integer;
  eDPM: Extended;
  FileHandle: integer;
begin
  FileHandle := FileOpen(FileName, fmOpenWrite);      eDPM := DPI * (100 / 2.54); // 因為 BMP 裡紀錄的是每公尺幾點,要換算
  iDPM := Trunc(eDPM)   1;    // 無條件進 1      FileSeek(FileHandle, $26, 0);
  FileWrite(FileHandle, iDPM, SizeOf(iDPM));
  FileWrite(FileHandle, iDPM, SizeOf(iDPM));
  FileClose(FileHandle);
end;    procedure TForm1.Button1Click(Sender: TObject);
begin
  SetBMPDPI('C:\test.bmp', 300);
end;
KuoWeichung
一般會員


發表:2
回覆:4
積分:1
註冊:2005-05-20

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-07-07 12:03:37 IP:211.78.xxx.xxx 未訂閱
但是這樣的做法 應該只是進去修改BMP檔 把記錄DPI的欄位改成300DPI 但是我所需要的是實際的300DPI圖檔
wyndog
資深會員


發表:7
回覆:362
積分:348
註冊:2004-10-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-07-07 13:10:51 IP:60.248.xxx.xxx 未訂閱
舉個例子好了,如果說一張 3" x 5" 的圖形 在 300 DPI 底下,應該是 900 x 1500 如果是在 96 DPI 底下,就會變成 288 x 480 那麼,以此例來說的話,TImage 轉出來的 BMP 是何者? 若是後者的話,那,這個方法,自然不行 若是前者的話,就表示圖形沒錯,只是 TImage 只認 96 DPI 所以,把 BMP 檔紀錄成 96DPI 的,那麼我們只要修改那二個值 就可以讓認 DPI 的東西,可以認成 300 DPI
KuoWeichung
一般會員


發表:2
回覆:4
積分:1
註冊:2005-05-20

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-07-07 17:22:17 IP:211.78.xxx.xxx 未訂閱
實際檢查圖檔後 發現果然是如此 雖然圖本身資料是正確的300DPI格式儲存 但是應該是因為TImage這個笨元件 所以把Header裡面的DPI寫成96了
系統時間:2024-04-25 7:09:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!