如何存储体积较大的.bmp图像文件?(10分)

  • 主题发起人 主题发起人 sjm
  • 开始时间 开始时间
S

sjm

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Button1Click(Sender: TObject);
var
Picture1: TPicture;
begin
Table1.Append;
Picture1 := TPicture.Create;
if OpenPictureDialog1.Execute then
begin
Picture1.LoadFromFile(OpenPictureDialog1.Filename);
Table1.FieldByName('照片').Assign(Picture1);
end;
end;
说明:Table1连接sql server 2000的一个表,就一个字段:'照片'(Image型)。
如果装入的是较小的.bmp图像文件均不出现问题,当我试图打开一个600多K的.bmp图像文件时就报错:Invalid BLOB Length。请问Image字段不能存贮大尺寸的图像文件吗?如何解决呢?谢谢!
 
不妨换一个方式,对bmp图像格式转换一下,例如转换为jpg格式,文件大小就被大大的压缩了
 
不如转换成*.jpg图象,然后再存储。
我这有个例子:用Image存储,并且能够显示出来!你可以稍微改动一下。
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, DB, ADODB, Grids, DBGrids, Menus,Jpeg;

type
TForm1 = class(TForm)
DataSource1: TDataSource;
DBGrid1: TDBGrid;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
Image1: TImage;
PopupMenu1: TPopupMenu;
LoadPic: TMenuItem;
deletepic: TMenuItem;
saveAs: TMenuItem;
procedure LoadPicClick(Sender: TObject);
procedure deletepicClick(Sender: TObject);
procedure saveAsClick(Sender: TObject);
procedure DataSource1DataChange(Sender: TObject; Field: TField);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.LoadPicClick(Sender: TObject);
var
pic:TPicture;
jpeg:TJPEGImage;
begin
datasource1.dataset.edit;
if(opendialog1.Execute) then
begin
pic:=tpicture.Create;
jpeg:=TJPEGImage.Create;
try
pic.LoadFromFile(opendialog1.FileName);
if pic.Bitmap.Empty=false then
jpeg.Assign(pic.Bitmap)
else
jpeg.loadfromfile(opendialog1.FileName);
datasource1.dataset.fieldbyname('photo').assign(jpeg);
finally
pic.Free;
jpeg.free;
end;
end;
end;

procedure TForm1.deletepicClick(Sender: TObject);
begin
datasource1.dataset.edit;
datasource1.dataset.fieldbyname('photo').assign(nil);
datasource1.dataset.post;
end;

procedure TForm1.saveAsClick(Sender: TObject);
begin
if(savedialog1.Execute)then
image1.Picture.Graphic.SaveToFile(savedialog1.FileName);
end;

procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
var
jpeg:TJPEGImage;
begin
if datasource1.DataSet.FieldByName('photo').IsNull=false then
begin
jpeg:=tjpegimage.create;
try
jpeg.assign(datasource1.DataSet.FieldByName('photo'));
image1.Picture.Assign(jpeg);
finally
jpeg.free;
end;
end
else
image1.Picture.Assign(nil);
end;

end.
 
多人接受答案了。
 
后退
顶部