在数据库中采用image存储,如果是BMP类型的直接用DBIMAGE就能显示,
但如果是JPG类型的就显示不出来!
看了许多帖子,有用IMAGE显示的!
image1.Picture.Bitmap.Assign(TBlobField(dm.ClassMateQuery.FieldByName('pic')));
image1.Picture.Assign(TBlobField(dm.ClassMateQuery.FieldByName('pic')));不知道什么区别,我试了都不行!
还有下面这样的
var
jpg : Tjpegimage;
x : Tmemorystream;
begin
jpg := Tjpegimage.Create;
x := Tmemorystream.Create;
TBlobField(dm.ClassMateQuery.FieldByName('pic')).SaveToStream(x);
jpg.LoadFromStream(x);
jpg.SaveToFile('e:\temp\test.jpg'); image1.Picture.Assign(jpg);
jpg.Free;
x.Free;
end;我试了也不行!
请问JPG格式的如何显示出来!
但如果是JPG类型的就显示不出来!
看了许多帖子,有用IMAGE显示的!
image1.Picture.Bitmap.Assign(TBlobField(dm.ClassMateQuery.FieldByName('pic')));
image1.Picture.Assign(TBlobField(dm.ClassMateQuery.FieldByName('pic')));不知道什么区别,我试了都不行!
还有下面这样的
var
jpg : Tjpegimage;
x : Tmemorystream;
begin
jpg := Tjpegimage.Create;
x := Tmemorystream.Create;
TBlobField(dm.ClassMateQuery.FieldByName('pic')).SaveToStream(x);
jpg.LoadFromStream(x);
jpg.SaveToFile('e:\temp\test.jpg'); image1.Picture.Assign(jpg);
jpg.Free;
x.Free;
end;我试了也不行!
请问JPG格式的如何显示出来!
TBlobField(dm.ClassMateQuery.FieldByName('pic')).SaveToStream(x);
x.Position := 0;/////你再试试
jpg.LoadFromStream(x);
jpg.SaveToFile('e:\temp\test.jpg');
var
JPG:TJPEGImage;
MS:TMemoryStream;
begin
JPG:=TJPEGImage.Create ;
MS:=TMemoryStream.Create ;
TBlobField(ADOTable1.FieldByName('zp')).SaveToStream(ms);
ms.Position :=0;
JPG.LoadFromStream(ms);
IMage1.Picture.Assign(JPG);
Form2.Image1.Picture.Assign(JPG);
end;
Jpgevar
strm:tadoblobstream;
jpegimage:tjpegimage;strm := tadoblobstream.Create(tblobfield(ADOQuery1.fieldbyname('img_Filecontent')),bmread);
//从你数据库里取出JPG图片。img_Filecontent--存入图片的字段jpegimage := tjpegimage.Create ;
jpegimage.LoadFromStream(strm);
image1.Picture.Graphic := jpegimage;
JPG:TJPEGImage;
MS:TMemoryStream;
begin
JPG:=TJPEGImage.Create ;
MS:=TMemoryStream.Create ;
TBlobField(ADOTable1.FieldByName('zp')).SaveToStream(ms);
Ms.Position :=0;
JPG.LoadFromStream(Ms);
MS.Free ;
IMage1.Picture.Assign(JPG);这个可以
begin
try
SheetPictureJPEG:=TJPEGImage.Create;
SheetPictureJPEG.Assign(FieldByName('SheetPicture') );
imageSheet.Picture.Graphic:=SheetPictureJPEG;
finally
SheetPictureJPEG.Free ;
end;
end;
var
strm:tadoblobstream;
jpegimage:tjpegimage;
bitmap:tbitmap;
begin
strm := tadoblobstream.Create(tblobfield(adotable1.fieldbyname('MYIMAGE')),bmread);
try //try1
strm.position :=0;
image1.Picture.Graphic := nil; //清除图像
// BMP、JPEG两种图像数据必需分别处理
if adotable1.fieldbyname('isbmp').asstring ='1' then //BMP型图像数据
begin //begin11
bitmap := tbitmap.Create ;
try //try11
bitmap.LoadFromStream(strm);
image1.Picture.Graphic := bitmap;
finally
bitmap.Free;
end; //end try11
end //end begin11
else if adotable1.fieldbyname('isbmp').asstring ='0' then //JPEG型图像数据
begin //begin12
jpegimage := tjpegimage.Create ;
try //try12
jpegimage.LoadFromStream(strm);
image1.Picture.Graphic := jpegimage;
finally
jpegimage.Free ;
end; //end try12
end; //end begin12
finally
strm.Free ;
end; //end try1
end; 如果你想将数据库中的图像导出到外部文件中可采用如下关键语句:
image1.Picture.SaveToFile(FileName );
我原先是这样写入数据库的
with dm.adoquery1 do
begin
close;
sql.Clear;
sql.Add('insert into classmate(name,email,phone,memo,pic) values(:h1,:h2,:h3,:h4,:h5)');
parameters[0].Value := nameedit.Text;
parameters[1].Value := emailedit.Text;
parameters[2].Value := phoneedit.Text;
parameters[3].Value := memo1.Text;
parameters[4].Assign(image1.Picture);
execsql;
showmessage('保存成功');
end;也用过这样的方式:
var mypicstream : Tadoblobstream;
begin
dm.ClassMateQuery.Edit;
mypicstream := Tadoblobstream.Create(TBlobField(dm.ClassMateQuery.FieldByName('pic')),bmwrite); With DM.ClassMateQuery DO
Begin
mypicstream.LoadFromFile(openpicturedialog1.FileName);
mypicstream.Position := 0;
edit;
fieldbyname('name').AsString := nameedit.Text;
fieldbyname('email').AsString := emailedit.Text;
fieldbyname('phone').AsString := phoneedit.Text;
fieldbyname('memo').AsString := memo1.Text;
TBlobfield(fieldbyname('pic')).LoadFromStream(mypicstream);
post;
mypicstream.Free;
end;但出错提示:BITMAP IMAGE IS NOT VALID读取我用下面的
var
strm : Tadoblobstream;
pic : Tjpegimage;
begin
datasource1.DataSet.Last;
strm := Tadoblobstream.Create(TBlobField(dm.ClassMateQuery.FieldByName('pic')),Bmread);
strm.Position := 0;
image1.Picture.Graphic := nil;
pic := Tjpegimage.Create;
pic.LoadFromStream(strm);
image1.Picture.Graphic := pic;
pic.Free;
strm.Free;
end;提示JPEG ERROR #42是不是写入方式不对造成的哪里错了,再次感谢大家