在《Delphi存取圖像完整解決方案》一文中,筆者提供了一種DELPHI存取JPEG、BMP圖像到數(shù)據(jù)庫的解決方案,雖然它適用于ACCESS和SQL數(shù)據(jù)庫,但它并不適用于所有數(shù)據(jù)庫(比如PARADOX數(shù)據(jù)庫中的GRAPHIC圖像字段就不能采用該方法存取圖像數(shù)據(jù)),下文將介紹DELPHI利用ASSIGN方法存取JPEG、BMP圖像到數(shù)據(jù)庫的另一解決方案來進(jìn)行補(bǔ)充完善。演示數(shù)據(jù)庫結(jié)構(gòu)和窗口界面設(shè)計(jì)同前文,不再重述,將單元的相應(yīng)程序代碼作如下更換:
1. 圖像數(shù)據(jù)的選擇及保存
procedure Tform1.selectimageClick(Sender: TObject); //選擇圖像 begin if openpicturedialog1.Execute then image1.Picture.LoadFromFile(openpicturedialog1.FileName ); end; procedure Tform1.savetodbClick(Sender: TObject); //保存圖像到數(shù)據(jù)庫 var ext:string; begin if image1.picture.Graphic <> nil then //避免image1中無圖像保存出錯(cuò) begin adotable1.Edit ; adotable1.FieldByName('myimage').Assign(image1.Picture.Graphic); //以下記錄保存到數(shù)據(jù)庫的圖像格式 ext:=extractfileext(openpicturedialog1.FileName ); //取出文件擴(kuò)展名 if uppercase(ext) = '.BMP' THEN adotable1.FieldByName('isbmp').VALUE := 1 //BMP型圖像數(shù)據(jù) ELSE IF (UPPERCASE(EXT) = '.JPEG') OR (UPPERCASE(EXT) = '.JPG') THEN adotable1.FieldByName('isbmp').VALUE := 0; //JPEG型圖像數(shù)據(jù) ADOTABLE1.Post ; end; end;
2. 圖像數(shù)據(jù)的讀取及顯示
procedure Tform1.ADOTable1AfterScroll(DataSet: TDataSet); //ADOTable1的AfterScroll事件方法程序 var jpegimage:tjpegimage; begin image1.Picture.Graphic :=nil; //下邊BMP、JPEG兩種圖像數(shù)據(jù)必需分別處理 if adotable1.fieldbyname('isbmp').Asstring = '1' then //BMP型圖像數(shù)據(jù) image1.Picture.bitmap.Assign(adotable1.fieldbyname('myimage')) //上邊語句中的bitmap不能為graphic,否則會(huì)出錯(cuò) else if adotable1.fieldbyname('isbmp').asstring = '0' then //JPEG型圖像數(shù)據(jù) begin //begin2 jpegimage := tjpegimage.Create ; //通過jpegimage將圖像顯示在image1,否則會(huì)出錯(cuò) try jpegimage.Assign(adotable1.fieldbyname('myimage')); image1.Picture.Graphic :=jpegimage; finally jpegimage.Free ; end; //end try end; //end begin2 end;
注:別忘了在單元文件接口部分的uses語句中添入JPEG單元引用。
以上程序代碼在DELPHI6.0+SQL(或ACCESS或PARADOX)數(shù)據(jù)庫下運(yùn)行通過。
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!