图象存取(200分)

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

sun2003

Unregistered / Unconfirmed
GUEST, unregistred user!
如何将bmp,jpeg...任何类型图形存入字段类型为image的表中。
 
1)存储jpg图片
procedure TMainForm.btnYesClick(Sender: TObject);
var
MyJPEG: TJPEGImage;
MS: TMemoryStream;
begin

MyJpeg := TJpegImage.Create;
try
MyJpeg.Assign(image1.Picture.Graphic)
Ms := TMeMoryStream.Create;
MyJpeg.SaveToStream(Ms);

Ms.Position := 0;

adoqrytest.Edit;
adoqrytest['id'] := '1';
TBlobField(adoqrytest.FieldByName('picture')).LoadFromStream(MS);
adoqrytest.Post;
finally
MyJpeg.Free;
Ms.Free;
end;

end;

2)读取jpg图片
procedure TMainForm.FormShow(Sender: TObject);
var
tempStream: TStringStream;
tempJpeg: TJpegImage;
begin

try
tempStream := TStringStream.Create('');
TBlobField(adoqrytest.FieldByName('picture')).SaveToStream(tempStream);
tempstream.position:=0
tempJpeg := TJpegImage.Create;
tempJpeg.LoadFromStream(tempStream);
DBImage1.Picture.Bitmap.Assign(tempJpeg);
finally
tempStream.Free;
tempJpeg.Free;
end;

end;

 
在楼上解答的基础上,如能再压缩一下,就更好了,也很简单
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1819428
 
我有控件,要不要
 
使用TBlobField 类型
 
HI,给你提供两个函数:

//存储图片
procedure TFMW_M0201.SaveImage(Ige:TImage;
DQ_Query:TADOQUERY;
FieldName:String);
var
MyJPEG: TJPEGImage;
MS: TMemoryStream;
begin

MyJpeg := TJpegImage.Create;
Ms := TMeMoryStream.Create;
DQ_QUERY.Edit;
try
if Ige.Picture.Graphic <> nil then

begin

MyJpeg.Assign(Ige.Picture.Graphic);

MyJpeg.SaveToStream(Ms);
Ms.Position := 0;

TBlobField(DQ_QUERY.FieldByName(FieldName)).LoadFromStream(MS);
end else

TBlobField(DQ_QUERY.FieldByName(FieldName)).Clear;
finally
Ms.Free;
MyJpeg.Free;
end;

end;


//读取图片
procedure TFMW_M0201.ShowImage(Ige: TImage;
DQ_Query: TADOQUERY;
FieldName: String);
var
TempStream: TStringStream;
TempJpeg: TJpegImage;
begin

try
TempStream := TStringStream.Create('');
TBlobField(DQ_QUERY.FieldByName(FieldName)).SaveToStream(TempStream);
Tempstream.position := 0;
TempJpeg := TJpegImage.Create;
TempJpeg.LoadFromStream(TempStream);
Ige.Picture.Bitmap.Assign(tempJpeg);
finally
TempStream.Free;
TempJpeg.Free;
end;

end;

 
To 远帆:
存储jpg图片可以用流的方似存取.其他类型的图形文件又如何处理
 
流是不区分文件类型的,所有的图片(包括其它文件)都可以以流的型式存进数据库。
不过读出后显示的方法是不太一样的。
 
To 远帆:
能给个例子?流读出(非jpeg)
 
var
MStr: TMemoryStream;
Img: TBitmap;
begin

MStr := TMemoryStream.Create;
TBlobField(AdoQuery1.FieldByName('Pic')).SaveToStream(MStr);
MStr.Position:=0;
DBImage1.Picture.Bitmap.LoadFromStream(MStr);
MStr.Free;
end;


不过实际上dbimage直接支持bitmap的读取。
如果是gif,就需要一个gifimage单元,与jpg作类似的转换操作。
当然,如果你要求是任意的图像文件,那就需要对图像类型进行判断,只处理自已能够
支持的。
 
接受答案了.
 
后退
顶部