到底如何讀取檔案的內容~~拜託幫幫忙!!! |
尚未結案
|
coolfish1208
一般會員 發表:1 回覆:2 積分:0 註冊:2003-05-06 發送簡訊給我 |
因為課程所需,我需要用到最低階的開啟檔案方式來讀取bmp檔 && wav檔
bmp檔需要讀取bitmapfileheader && bitmapinfoheader
這些都需要一個byte一個byte的讀取,但是我真的找不到方式可以成功的讀取
我試過用
方法一:AssignFile,reset,blockread 這個方式讀取出來都不正確
方法二:fileopen,fileseek,fileread這個方式我也沒辦法將資料讀取到我要的地方
所以想要請問各位前輩,假設沒有物件,你們要如何讀取bmp和wav的檔案呢??
方法一跟方法二都可以開啟檔案,他們倆者是差在哪裡呢??
我參考了C ,在C 中用
fread(&bmfh.bfType,4,1,stream)
就可以將資料讀取到bfType中,且filepos會跟著移動,但是delphi我真的找不到方法
可以請知道的前輩給點指示嗎~~~真的寫到很灰心了!!
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
coolfish1208您好:
引言:但是delphi我真的找不到方法別灰心,我幫您找了幾個... 可以參考下面連結: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=29294 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=29327 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=28829 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~> 發表人 - |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
這個是 Delphi Help 取出來的例于
前段讀取檔案到 Buffer 的方法應可照用,後段放到 StringGrid 的程式碼換成你分拆 BMP / WAV 的程式碼便好了。
procedure TForm1.Button1Click(Sender: TObject); var iFileHandle: Integer; iFileLength: Integer; iBytesRead: Integer; Buffer: PChar; i: Integer begin if OpenDialog1.Execute then begin try iFileHandle := FileOpen(OpenDialog1.FileName, fmOpenRead); iFileLength := FileSeek(iFileHandle,0,2); FileSeek(iFileHandle,0,0); Buffer := PChar(AllocMem(iFileLength 1)); iBytesRead := FileRead(iFileHandle, Buffer^, iFileLength); FileClose(iFileHandle); for i := 0 to iBytesRead-1 do begin StringGrid1.RowCount := StringGrid1.RowCount 1; StringGrid1.Cells[1,i 1] := Buffer[i]; StringGrid1.Cells[2,i 1] := IntToStr(Integer(Buffer[i])); end; finally FreeMem(Buffer); end; end; end;發表人 - Justmade 於 2003/05/07 09:42:08 |
coolfish1208
一般會員 發表:1 回覆:2 積分:0 註冊:2003-05-06 發送簡訊給我 |
|
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
coolfish1208
一般會員 發表:1 回覆:2 積分:0 註冊:2003-05-06 發送簡訊給我 |
謝謝板大熱心的回答!
但是...
我自己宣告的BitmapFileHeader如下 tagBITMAPFILEHEADER = record
bfType: Word;
bfSize: LongWord;
bfReserved1: Word;
bfReserved2: Word;
bfOffbits: LongWord;
end; 現在我的bfType需要的兩個Byte...但是陣列好像沒辦法把buffer[0]buffer[1]的內容放到一個變數
所以我才會捨棄用這種方式...>< 最主要是因為不知道怎麼放進去!!
最希望的方式就是像C
fread(&bmfh.bfType,4,1,stream)
這樣當然可以很順利讀到我指定的位置..
但是delphi有這種方法嗎??
|
Naruto
一般會員 發表:20 回覆:19 積分:7 註冊:2003-03-18 發送簡訊給我 |
//提供一個範例如下: var
aBmpFH: TBitmapFileHeader;//檔頭資訊
aBmpIH: TBitmapInfoHeader;//檔案資訊
aFile: TFileStream;
begin
try
aFile:=TFileStream.Create( aFileName, fmOpenRead );
aFile.ReadBuffer(aBmpFH, SizeOf(aBmpFH));//讀取檔頭資訊
aFile.ReadBuffer(aBmpIH, SizeOf(aBmpIH));//讀取檔案資訊
finally
aFile.Free;
end;
end;
end;
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |