線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3153
推到 Plurk!
推到 Facebook!

如何儲存與顯示JPG圖檔?

答題得分者是:jean2004
ez3cshop
一般會員


發表:13
回覆:6
積分:3
註冊:2005-01-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-09 21:48:45 IP:61.230.xxx.xxx 未訂閱
請教大家: 我在網站找到一些使用TDBImage存取JPG格式圖檔的資料, 但它是針對Delphi比較多, 就是找不到相關C Builder 6的資料. 我現在使用SQL Server 2000, 想使用TDBImage元件來顯示JPG圖檔, 該如何實作呢? 或者是說, 使用TImage元件來做我也不反對, 因為我印象中, 曾在這裡看過高手使用TImage來顯示TDBImage格式的圖檔, 據說, 效能不錯. Thanks!
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-11 02:14:19 IP:211.22.xxx.xxx 未訂閱
站裏資料很多,請多用搜尋! > ------------------- 學,然後知不足。
ez3cshop
一般會員


發表:13
回覆:6
積分:3
註冊:2005-01-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-12 19:33:50 IP:220.135.xxx.xxx 未訂閱
謝謝Stallion, 我參考了http://delphi.ktop.com.tw/topic.php?TOPIC_ID=70543這個主題,在存圖的部份大致OK. 但在讀圖的部份, 會有一些問題: 
<textarea class="cpp" rows="10" cols="60" name="code"> void __fastcall TClientMainForm::Button2Click(TObject *Sender) { //讀圖 Query1->Open(); TMemoryStream *Stream = new TMemoryStream(); TJPEGImage *jpgstream = new TJPEGImage(); Stream = (TMemoryStream *)ClientMainForm->ZQAttachment->CreateBlobStream(Query1->FieldByName("PCT"), bmRead); Stream->Position = 0; jpgstream->LoadFromStream(Stream); ClientMainForm->Image1->Picture->Assign(jpgstream); //PCT欄位是空值, 會當在這裡 Stream->Free(); jpgstream->Free(); } </textarea><br /> 1. 若JPG的圖檔太大, 如2MB, 則會只會讀出一點, 剩下的地方就黑黑的. 檔案小的JPG圖檔則沒有問題. 2. 若資料庫那一筆的圖檔並沒有資料, 則讀圖的時候會出錯. 請問大家, 我要如何判段這筆記錄的圖檔是沒有資料的? 3.萬一某筆記錄的圖檔之格式不是JPG, 也會發生錯誤. 那要如何去避開這個問題呢? 謝謝大家.
編輯記錄
yckuo 重新編輯於 2007-04-27 09:59:42, 註解 套用程式碼編輯‧
jean2004
初階會員


發表:69
回覆:80
積分:39
註冊:2004-12-18

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-14 16:56:59 IP:222.135.xxx.xxx 未訂閱
大蝦,印象裏的DBImage控制項是可以顯示jpeg圖像的,但是要加上這個:#include <jpeg.hpp> 另外,我有一個完整的例子代碼,符合大蝦的要求,這個可以上傳和下載各種檔,同時也支持JPEG和BMP等格式的檔,源碼如下,請參考: 
<textarea class="cpp" rows="10" cols="60" name="code"> #include #include #include #include //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; AnsiString iCString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" ExtractFilePath(ExpandFileName(Application->ExeName)) "pic.mdb;Persist Security Info=False"; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) {//添加圖片按鈕 if(OpenPictureDialog1->Execute()) { String strSql = "INSERT INTO photo (name,pic)"; strSql = strSql " VALUES('無名氏',:picture)"; try{ ADOQuery1->Close(); ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Add(strSql); ADOQuery1->Parameters->ParamByName("picture")->LoadFromFile(OpenPictureDialog1->FileName, ftBlob); ADOQuery1->ExecSQL(); } catch(...) { return; } ADOQuery1->Close(); ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Add("select * from photo"); ADOQuery1->Open(); DBGrid1->Refresh(); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button4Click(TObject *Sender) {//修改圖片按鈕 if(OpenPictureDialog1->Execute()) { AnsiString name=ADOQuery1->FieldByName("ID")->Value ; String strSql = "UPDATE photo SET PIC="; strSql = strSql " :picture where ID="; strSql = strSql name; try{ ADOQuery1->Close(); ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Add(strSql); ADOQuery1->Parameters->ParamByName("picture")->LoadFromFile(OpenPictureDialog1->FileName, ftBlob); ADOQuery1->ExecSQL(); } catch(...) { return; } ADOQuery1->Close(); ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Add("select * from photo"); ADOQuery1->Open(); //DBGrid1->Refresh(); } } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) {//執行查詢 ADOQuery1->Close(); ADOQuery1->SQL->Clear(); ADOQuery1->ConnectionString=iCString; ADOQuery1->SQL->Add("select * from photo"); ADOQuery1->Open(); } //--------------------------------------------------------------------------- void __fastcall TForm1::DataSource1DataChange(TObject *Sender, TField *Field) {//下載圖片 if(ADOQuery1->RecordCount>0) { TStream *Stream1; Stream1=ADOQuery1->CreateBlobStream(ADOQuery1->FieldByName("pic"), bmRead); try{ char *TemplatePtr; TemplatePtr=new char[Stream1->Size]; try{ Stream1->Read(TemplatePtr,Stream1->Size); if(Stream1->Size>2) { FILE *fp; AnsiString Fname="AA." AnsiString(*TemplatePtr=='B'?"BMP":"JPG");//區別BMP和JPG格式 Caption=Fname; fp=fopen(Fname.c_str(),"wb"); fwrite(TemplatePtr,Stream1->Size,1,fp); fclose(fp); Caption=Fname; if (Fname=="AA.JPG") { TJPEGImage *jp = new TJPEGImage(); jp->LoadFromFile(Fname) ; Image2->Picture->Assign(jp) ; Image2->Tag=1; } else { Graphics::TBitmap *BrushBmp = new Graphics::TBitmap; BrushBmp->LoadFromFile(Fname) ; Image2->Picture->Assign(BrushBmp) ; Image2->Tag=1; } } else {//無圖片處理 Image2->Tag=0; Image2->Picture->Assign(NULL); } } catch(...) { delete TemplatePtr; throw; } delete TemplatePtr; } catch(...){ delete Stream1; throw; } delete Stream1; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) {//批量入庫按鈕 ListBox1->Clear();//清空ListBox控制項 if(OpenPictureDialog1->Execute()) { AnsiString PathName=ExtractFilePath(OpenPictureDialog1->FileName); TSearchRec sr; if(FindFirst(PathName "*.*", faAnyFile, sr) == 0) { do { if(!(sr.Attr & faDirectory)) { if(ExtractFileExt(sr.Name).UpperCase()==".BMP" || ExtractFileExt(sr.Name).UpperCase()==".JPG" || ExtractFileExt(sr.Name).UpperCase()==".JPEG") ListBox1->Items->Add(sr.Name); } } while(FindNext(sr) == 0); FindClose(sr); } } if(ListBox1->Count>0) { for(int i=0;i<=ListBox1->Count-1;i ) { ListBox1->ItemIndex = i; String strSql = "INSERT INTO photo (name,pic)"; strSql = strSql " VALUES('無名氏',:picture)"; try{ ADOQuery1->Close(); ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Add(strSql); ADOQuery1->Parameters->ParamByName("picture")->LoadFromFile(ExtractFilePath(OpenPictureDialog1->FileName) ListBox1->Items->Strings[i], ftBlob); ADOQuery1->ExecSQL(); } catch(...) { return; } } } ADOQuery1->Close(); ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Add("SELECT * FROM photo"); ADOQuery1->Open(); DBGrid1->Refresh(); } </textarea>
編輯記錄
yckuo 重新編輯於 2007-04-27 09:54:31, 註解 套用程式碼編輯‧
KENI_LIN
中階會員


發表:86
回覆:267
積分:90
註冊:2004-05-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-07-14 18:53:39 IP:220.228.xxx.xxx 未訂閱
引言: 或者是說, 使用TImage元件來做我也不反對, 因為我印象中, 曾在這裡看過高手使用TImage來顯示TDBImage格式的圖檔, 據說, 效能不錯. Thanks!
TImage 元件的範例程式: (1)JPG與BMP格式轉換,看是要開JPG或存JPG都可以! http://delphi.ktop.com.tw/topic.php?TOPIC_ID=68151 (2)如何開啟JPG檔. http://delphi.ktop.com.tw/topic.php?TOPIC_ID=70359 (3)載入JPG~存入JPG. http://delphi.ktop.com.tw/topic.php?TOPIC_ID=70569 寒窗苦讀十年書;只待今朝狀元時!~~ ︵ / / ︵ ( ∩ ∩ ) ○ ︶ ○ Keni Lin
------
Keni Lin
系統時間:2024-11-23 7:27:04
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!