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

請問一下要如何讀取各種檔案的檔頭資料呢?

答題得分者是:P.D.
ss61313
一般會員


發表:1
回覆:3
積分:0
註冊:2010-04-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-05-02 12:37:12 IP:114.26.xxx.xxx 訂閱
 如題
要如何取得檔案的檔頭資料
有沒有辦法直接讀到任何檔案的檔頭呢?
P.D.
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-05-03 16:08:36 IP:118.169.xxx.xxx 未訂閱
哇! 如果那位仁兄有這方面的技術, 我也很想弄到一份!!
ss61313
一般會員


發表:1
回覆:3
積分:0
註冊:2010-04-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-05-03 17:08:35 IP:114.26.xxx.xxx 訂閱

===================引 用 P.D. 文 章===================
哇! 如果那位仁兄有這方面的技術, 我也很想弄到一份!!


那如果是單純讀取圖片檔的能夠讀到嗎0.0
例如JPG或BMP 我是有搜尋過版上的文章 不過....看不太懂...
P.D.
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-05-03 22:44:54 IP:118.169.xxx.xxx 未訂閱
這是本站網友提供的判斷公式, 我有稍微改一下(SORRY, 我忘了那位)
回傳1:BMP, 2:JPG
[code delphi]
function IsBMPfile(const AFilename: String; var AWidth, AHeight: Integer): integer;
var f: TFileStream;
bfh: TBitmapFileHeader;
HeaderSize: DWord;
w: Word;
begin
Result:= 0;
AWidth:= 0;
AHeight:= 0;
f:= TFileStream.Create(AFilename, fmOpenRead or fmShareDenyNone);
try
f.ReadBuffer(bfh, SizeOf(bfh));
// BMP $4D42, JPG $D8FF
if (bfh.bfType=$4D42) or (bfh.bfType=$D8FF) then begin
case bfh.bfType of
$4D42: result:= 1;
$D8FF: result:= 2;
end;
f.ReadBuffer(HeaderSize, SizeOf(HeaderSize));
case HeaderSize of
// OS/2 Bitmap
SizeOf(TBitmapCoreHeader):
begin
f.ReadBuffer(w, SizeOf(w));
AWidth:= w;
f.ReadBuffer(w, SizeOf(w));
AHeight:= w;
end;
SizeOf(TBitmapInfoHeader),
SizeOf(TBitmapV4Header),
SizeOf(TBitmapV5Header):
begin
f.ReadBuffer(AWidth, SizeOf(AWidth));
f.ReadBuffer(AHeight, SizeOf(AHeight));
end;
// unknown Bitmap format
else exit;
end;
// there are top down bitmaps with a negative height
AHeight:= Abs(AHeight);
end;
finally
f.Free;
end;
end;

[/code]
ss61313
一般會員


發表:1
回覆:3
積分:0
註冊:2010-04-26

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-05-06 20:33:29 IP:114.26.xxx.xxx 訂閱
 雖然還不是看很懂....
不過我會繼續加油搞懂他的
P.D.
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-05-07 08:19:45 IP:118.169.xxx.xxx 未訂閱
其實, 如果你只想知道檔頭, 函數只要下 filename 即可, 後面兩組 awidth, aheigth 可以拿掉
ss61313
一般會員


發表:1
回覆:3
積分:0
註冊:2010-04-26

發送簡訊給我
#7 引用回覆 回覆 發表時間:2010-05-07 17:10:04 IP:114.26.xxx.xxx 訂閱

===================引 用 P.D. 文 章===================
其實, 如果你只想知道檔頭, 函數只要下 filename 即可, 後面兩組 awidth, aheigth 可以拿掉

謝謝 回應~正在嘗試中
主要問這個的原因是想做出在程式中將圖片的資料修改掉,例如修改它的彩度,大小,像素等等的

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