程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi圖像存取另類解決方案

Delphi圖像存取另類解決方案

編輯:Delphi

在《Delphi存取圖像完整解決方案》一文中,筆者提供了一種DELPHI存取JPEG、BMP圖像到數據庫的解決方案,雖然它適用於ACCESS和SQL數據庫,但它並不適用於所有數據庫(比如PARADOX數據庫中的GRAPHIC圖像字段就不能采用該方法存取圖像數據),下文將介紹DELPHI利用ASSIGN方法存取JPEG、BMP圖像到數據庫的另一解決方案來進行補充完善。演示數據庫結構和窗口界面設計同前文,不再重述,將單元的相應程序代碼作如下更換:

1. 圖像數據的選擇及保存

procedure Tform1.selectimageClick(Sender: TObject); //選擇圖像
begin
if openpicturedialog1.Execute then
image1.Picture.LoadFromFile(openpicturedialog1.FileName );
end;
procedure Tform1.savetodbClick(Sender: TObject); //保存圖像到數據庫
var
ext:string;
begin
if image1.picture.Graphic <> nil then //避免image1中無圖像保存出錯
begin
adotable1.Edit ;
adotable1.FieldByName('myimage').Assign(image1.Picture.Graphic);
//以下記錄保存到數據庫的圖像格式
ext:=extractfileext(openpicturedialog1.FileName ); //取出文件擴展名
if uppercase(ext) = '.BMP' THEN
adotable1.FieldByName('isbmp').VALUE := 1 //BMP型圖像數據
ELSE IF (UPPERCASE(EXT) = '.JPEG') OR (UPPERCASE(EXT) = '.JPG') THEN
adotable1.FieldByName('isbmp').VALUE := 0; //JPEG型圖像數據
ADOTABLE1.Post ;
end;
end;

2. 圖像數據的讀取及顯示

procedure Tform1.ADOTable1AfterScroll(DataSet: TDataSet); //ADOTable1的AfterScroll事件方法程序
 var
  jpegimage:tjpegimage;
 begin
  image1.Picture.Graphic :=nil;
  //下邊BMP、JPEG兩種圖像數據必需分別處理
  if adotable1.fieldbyname('isbmp').Asstring = '1' then //BMP型圖像數據
   image1.Picture.bitmap.Assign(adotable1.fieldbyname('myimage'))
   //上邊語句中的bitmap不能為graphic,否則會出錯
  else if adotable1.fieldbyname('isbmp').asstring = '0' then //JPEG型圖像數據
   begin //begin2
    jpegimage := tjpegimage.Create ; //通過jpegimage將圖像顯示在image1,否則會出錯
    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)數據庫下運行通過。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved