如何不透過副檔名的方式去判斷圖檔為BMP檔 |
尚未結案
|
weiliching
初階會員 發表:53 回覆:78 積分:31 註冊:2003-12-27 發送簡訊給我 |
|
pcplayer99
尊榮會員 發表:146 回覆:790 積分:632 註冊:2003-01-21 發送簡訊給我 |
根据文件的 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 發送簡訊給我 |
這是我常用判斷, 到目前為止還沒有認錯
函式 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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |