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

讀取jepg有問題

尚未結案
duer
一般會員


發表:3
回覆:7
積分:2
註冊:2002-07-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-12 13:11:30 IP:203.69.xxx.xxx 未訂閱
各位好, 我利用搜尋方式找到許多關於show圖的資訊, 但測試結果一直有誤, 最後只好請各位大大看看我的程式碼, 是否能解決呢,先謝謝各位囉。
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-12 14:22:22 IP:218.163.xxx.xxx 未訂閱
我試了一下程式沒有問題. TBlobField(cdsMain.FieldByName('pic') as TBlobField).SaveToStream(Stream); showmessage(inttostr(Stream.size)); // 看看 TMemoryStream.Size 對不對
duer
一般會員


發表:3
回覆:7
積分:2
註冊:2002-07-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-12 14:34:25 IP:203.69.xxx.xxx 未訂閱
先謝謝Mickey幫我測試, 我把showmessage(inttostr(Stream.size));加入程式裡, 是會show出數字出來, 然後我用step over, 到frmFrendsU.Image1.Picture.Assign(jpgstream);這行就會出現錯誤訊息, "JPEG error#52." 一樣的錯誤訊息。
duer
一般會員


發表:3
回覆:7
積分:2
註冊:2002-07-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-12 14:37:43 IP:203.69.xxx.xxx 未訂閱
Mickey說看看 TMemoryStream.Size 對不對 那是多少才對阿?? 我忘了說他顯示訊息是多少了, 顯示出是14728
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-12 14:41:19 IP:218.163.xxx.xxx 未訂閱
如果你是透過 BDE 來存取 BLOB 欄位, BDE "BLOB SIZE" 參數設定值須夠大(Default=32K), 你存入的 JPEG 圖是否太大了(我用 My Picture\sample.jpg)測試, 完全正常. Note : Size 應等於寫入時的 Stream Size. 發表人 - Mickey 於 2003/09/12 14:44:21
duer
一般會員


發表:3
回覆:7
積分:2
註冊:2002-07-26

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-09-12 15:52:58 IP:203.69.xxx.xxx 未訂閱
我找了一張6k的圖再測試一次, 但是還是一樣的結果,出現同樣的錯誤訊息。 "Note : Size 應等於寫入時的 Stream Size." 我發現我的圖檔Size都變大了, 要怎樣避免才能使大小相同呢? 再次感謝。
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-09-12 16:13:27 IP:218.163.xxx.xxx 未訂閱
我 D6(UpdatePack 2) + BDE + ODBC + Access , Delphi Source 是這樣寫的:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  table1.Edit;
  TBlobField(Table1.FieldByName('pic') as TBlobField).LoadFromFile('E:\My Pictures\Sample.jpg');
  table1.post;
end;    procedure TForm1.BitBtn2Click(Sender: TObject);
var
  Stream:TMemoryStream;
  jpgstream: TJpegImage ;
begin
  Stream:= TMemoryStream.Create;
  jpgstream:= TJPEGImage.Create;
  try
    TBlobField(Table1.FieldByName('pic') as TBlobField).SaveToStream(Stream);
    Stream.Position := 0;
    jpgstream.LoadFromStream(Stream);
    showmessage(inttostr(Stream.size));
    Image1.Picture.Assign(jpgstream);
  finally
    Stream.Free;
    jpgstream.free;
  end;
end;
即使我放大的圖(超過 32 KB)也不會有問題, 怎會這樣
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-09-12 17:52:48 IP:61.155.xxx.xxx 未訂閱
... ... jpgstream.LoadFromStream(Stream); jpgstream.Position := 0; frmFrendsU.Image1.Picture.Assign(jpgstream); ... ... try~~~~
duer
一般會員


發表:3
回覆:7
積分:2
註冊:2002-07-26

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-09-12 18:04:03 IP:203.69.xxx.xxx 未訂閱
再次感謝Mickey不厭其煩的回答我的問題, 但是有個問題是, 我若是直接在Access內嵌入一個圖檔, 然後我在程式裡才做讀取的動作, 這樣會有什麼差別嗎??
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-09-12 22:28:14 IP:218.32.xxx.xxx 未訂閱
嗯...剛剛用 MS Access 直接給圖進 BLOB Field,    的確會有 Jpeg #53 Error, 但如果用 Delphi 去 Insert Data,    讀出便無問題, 這...我也不知道 Access 到底是如何 Insert BLOB Data 的.< > 很抱歉...我幫不上忙了, 等等看是否有人用過相同的問題吧.< >
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-09-12 23:10:46 IP:211.76.xxx.xxx 未訂閱
透過access來存blob類型的資料是以OLE(Object Linking and Embedding)物件和檔頭儲存在資料庫中,檔頭指示可以開啟該檔的裝置和物件型態... 也就是說,你的資料庫內的blob型態的資料需要去除檔頭後才可以得到單純的blob資料... 換句話說,你的資料庫當初是由使用者直接透過access的介面去輸入值的,對吧? 發表人 - hahalin 於 2003/09/12 23:12:09
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-09-13 08:00:40 IP:202.39.xxx.xxx 未訂閱
參考這一篇: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=35730    --- 歡迎光臨 KTop 研究院--<-<-<@
duer
一般會員


發表:3
回覆:7
積分:2
註冊:2002-07-26

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-09-15 09:42:27 IP:203.69.xxx.xxx 未訂閱
引言: 嗯...剛剛用 MS Access 直接給圖進 BLOB Field, 的確會有 Jpeg #53 Error, 但如果用 Delphi 去 Insert Data, 讀出便無問題, 這...我也不知道 Access 到底是如何 Insert BLOB Data 的.< > 很抱歉...我幫不上忙了, 等等看是否有人用過相同的問題吧.< >
***************** 很感謝Mickey不厭其煩的解答咧........ 那想請問一下阿... 你說你是用Delphi 去 Insert Data.. 那這樣我來試試用Delphi去Insert好了.....
duer
一般會員


發表:3
回覆:7
積分:2
註冊:2002-07-26

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-09-15 09:46:36 IP:203.69.xxx.xxx 未訂閱
引言: 透過access來存blob類型的資料是以OLE(Object Linking and Embedding)物件和檔頭儲存在資料庫中,檔頭指示可以開啟該檔的裝置和物件型態... 也就是說,你的資料庫內的blob型態的資料需要去除檔頭後才可以得到單純的blob資料... 換句話說,你的資料庫當初是由使用者直接透過access的介面去輸入值的,對吧? 發表人 - hahalin 於 2003/09/12 23:12:09
********* 對阿,我的圖檔的確是直接透過Access的介面去輸入的, 但有解嗎???
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-09-15 15:40:11 IP:218.163.xxx.xxx 未訂閱
引言:
引言: 嗯...剛剛用 MS Access 直接給圖進 BLOB Field, 的確會有 Jpeg #53 Error, 但如果用 Delphi 去 Insert Data, 讀出便無問題, 這...我也不知道 Access 到底是如何 Insert BLOB Data 的.< > 很抱歉...我幫不上忙了, 等等看是否有人用過相同的問題吧.< >
***************** 很感謝Mickey不厭其煩的解答咧........ 那想請問一下阿... 你說你是用Delphi 去 Insert Data.. 那這樣我來試試用Delphi去Insert好了..... < face="Verdana, Arial, Helvetica"> 我上面測試之 Source 已經有...看用 TBLOBField.LoadFromFile 或 LoadFromStream Method 都行
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  table1.Edit;
  TBlobField(Table1.FieldByName('pic') as TBlobField).LoadFromFile('E:\My Pictures\Sample.jpg');
  table1.post;
end;
系統時間:2024-06-23 9:48:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!