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

如何不透過副檔名的方式去判斷圖檔為BMP檔

尚未結案
weiliching
初階會員


發表:53
回覆:78
積分:31
註冊:2003-12-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2016-08-31 09:27:09 IP:210.242.xxx.xxx 訂閱

因為我設計一個報表功能~ 在 Rave Repoer 但是目前rave report 只支援到BMP 圖檔格式
我要在程式取得之前要先判斷為bmp 的檔,
使用者常常把副檔名改成bmp ..但是本質檔案還是jpeg or png 等格式.

這問題有兩種解決法
1.除非讓rave report 支援 jprg 與 png
2. 取得前先判斷為 bmp 格式 ,不是用副檔名判斷的方式

請問個為先進是否有什麼方式解決?




pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2016-08-31 12:42:03 IP:120.237.xxx.xxx 訂閱
根据文件的 Content 来判断是否是 BMP。

BMP 档案,用 binary 方式打开它,它的开始三个 Byte 是 B, M, P 。你试试。比如用 TFileStream 打开。

我自己测试了一下,用 Windows 7 的画板保存一个 24bit 的 BMP,然后用以下代码打开,结果是:BM6

procedure TForm1.Button1Click(Sender: TObject);
var
F: TFileStream;
B: TBytes;
S: string;
begin
F := TFileStream.Create('F:\test.bmp', fmOpenRead);
try
SetLength(B, 3);
F.Position := 0;
F.Read(B[0], 3);

S := StringOf(B);
Memo1.Lines.Add(S);
finally
F.Free;
end;
end;
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2016-09-07 10:30:30 IP:118.160.xxx.xxx 未訂閱
這是我常用判斷, 到目前為止還沒有認錯

函式
function IsBMP(fmst: TMemoryStream): integer;
var f: TMemoryStream;
Buffer: LongInt;
bfh: word;
begin
fmst.Position:= 0;
fmst.ReadBuffer(Buffer,SizeOf(fmst));
f:= TMemoryStream.Create;
f.Write(Buffer,Sizeof(fmst));
try
f.Position:= 0;
f.ReadBuffer(bfh, 2);
// BMP $4D42, JPG $D8FF
case bfh of
$4D42: result:= 1;
$D8FF: result:= 2;
else result:= 0;
end;
finally
f.Free;
end;
end;


實作
宣告一個 mst : TMemoryStream 變數

xxxx.SaveToStream(mst); // 將圖片存入 mst
case IsBMP(mst) of
1: showmessage('ISBMP');
2: showmessage('ISJPG');
end;
mst.Free;
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2016-09-13 16:42:28 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-03-28 21:27:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!