如何利用MemoryStream存取圖片? |
尚未結案
|
han76816
一般會員 發表:10 回覆:9 積分:3 註冊:2010-03-08 發送簡訊給我 |
是這樣的,我想作一個寫入圖片到資料庫的功能
其中filepath是圖片在本機的路徑,ms是memorystream 要驗證這個圖片是否是jpg檔,jpg檔才可以寫入 以下是我接手的程式碼 副檔名確定是jpg, 但一直讀不出JFIF(順便想問問JFIF是什麼意思= =?) 試了一整天都試不出來,想請各位高手協助解答,謝謝! [code delphi] procedure Insert_Photo(filepath: String; member_no: String; Image1: TImage); var ms: TMemoryStream; cbuffer: array[0..4] of Char; sJFIF: string; iSEQNO: integer; flist: TList; JPEGImage: TJPEGImage; begin if UpperCase(Copy(filepath, Length(filepath)-2,3))<>'JPG' then Abort; try ms := TMemoryStream.Create; ms.LoadFromFile(filepath); ms.Seek(6,soFromBeginning); ms.Read(cbuffer, 4); sJFIF := cbuffer; finally ms.Free; end; if sJFIF <> 'JFIF' then begin ShowMessage(不允許的圖檔格式,不可上傳!) Abort; end; flist := Call_RPCWithFile('RemoteExecute1.php', filepath, 'update MEB_MEMBER SET MEB_MAIN_PIC=? where MEB_MAIN_MEMBER_NO=''' member_no ''''); if fList.Count = 0 then Abort; //讀取圖片 JPEGImage := TJPEGImage.Create; try JPEGImage.LoadFromFile(filepath); Image1.Picture.Graphic := JPEGImage; finally JPEGImage.Free; end; end; |
han76816
一般會員 發表:10 回覆:9 積分:3 註冊:2010-03-08 發送簡訊給我 |
程式碼有點怪怪的,再請大家協助了
procedure Insert_Photo(filepath: String; member_no: String; Image1: TImage); var ms: TMemoryStream; cbuffer: array[0..4] of Char; sJFIF: string; iSEQNO: integer; flist: TList; JPEGImage: TJPEGImage; begin if UpperCase(Copy(filepath, Length(filepath)-2,3))<>'JPG' then Abort; try ms := TMemoryStream.Create; ms.LoadFromFile(filepath); ms.Seek(6,soFromBeginning); ms.Read(cbuffer, 4); sJFIF := cbuffer; finally ms.Free; end; if sJFIF <> 'JFIF' then begin ErpMessage(GetLanguageStr('HTL', 'Message_Error_HTL001004' ), mtError); //不允許的圖檔格式,不可上傳! Abort; end; flist := Call_RPCWithFile('RemoteExecute1.php', filepath, 'update MEB_MEMBER SET MEB_MAIN_PIC=? where MEB_MAIN_MEMBER_NO=''' member_no ''''); if fList.Count = 0 then Abort; JPEGImage := TJPEGImage.Create; try JPEGImage.LoadFromFile(filepath); Image1.Picture.Graphic := JPEGImage; finally JPEGImage.Free; end; end;
|
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
小改一部份
[code delphi] const BufferSize = 50; var Buffer:string; // ...... ms.LoadFromFile(filepath); SetLength(Buffer, BufferSize); ms.Read(Buffer[1], BufferSize); iSEQNO := Pos('JFIF' #$00, buffer); if iSEQNO > 0 then // 允許的圖檔格式 // ...... [/code] ============================ JFIFJFIF網際網路上)的檔案。 參閱:Wiki |
han76816
一般會員 發表:10 回覆:9 積分:3 註冊:2010-03-08 發送簡訊給我 |
|
han76816
一般會員 發表:10 回覆:9 積分:3 註冊:2010-03-08 發送簡訊給我 |
我前面還有一個動作是,先把user開啟的圖片放入一個Image中,並另存新檔到photo.jpg
看photo.jpg是正常的,但就是不知道問題出在哪裡? 照您修改的地方讀出來的buffer前面是BM開頭...= =? if OpenDialog1.Execute then begin jpg := TJPEGImage.Create; try jpg.LoadFromFile(OpenDialog1.FileName); Image1.Picture.Bitmap.Assign(Jpg); ImageResize(Image1.Picture, image1.Width, image1.Height); Image1.Picture.SaveToFile('photo.jpg'); finally jpg.Free; end; end;
|
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
那代表你存的結果是副檔名為jpg的bmp檔...
試一下這個吧 [code delphi] if OpenDialog1.Execute then begin jpg := TJPEGImage.Create; try jpg.LoadFromFile(OpenDialog1.FileName); Image1.Picture.Bitmap.Assign(Jpg); ImageResize(Image1.Picture, image1.Width, image1.Height); //Image1.Picture.SaveToFile('photo.jpg'); jpg.Assign(Image1.Picture.Bitmap); jpg.SaveToFile('photo.jpg'); finally jpg.Free; end; end; [/code] ===================引 用 han76816 文 章=================== 我前面還有一個動作是,先把user開啟的圖片放入一個Image中,並另存新檔到photo.jpg 看photo.jpg是正常的,但就是不知道問題出在哪裡? 照您修改的地方讀出來的buffer前面是BM開頭...= =? ...43... |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |