存 var MS:TMemoryStream; begin MS:=TMemoryStream.create; image1.Picture.Bitmap.SaveToStream(MS); MS.Position:=0; adoquery1.Insert; TBlobField(adoquery1.FieldbyName('tp')).LoadFromStream(MS); adoquery1.Post; end;
上述方法可以存取各种图片文件,也适用于sqlserver数据库,如果有什么问题,发贴给我
to hempweed(萧萧) 问题是各种图片都存的,不知道是jpg,bmp还是gif的 TBlobField(ADODataSet1.FieldByName('photo')).SaveToFile('C:\aa.jpg');如果是bmp或者gif就不可以了 请再指教一下 to allan2002(丸子) 存入是可以的,现在想取出来,谢谢再考虑一下
给你点不是我写的参考 //查看图片 procedure TDM.ViewPhoto(ImagX:TImage;FiledX:TBlobField); var B:Tbitmap; JpegImage:TJpegImage; BS:TBlobStream; begin ImagX.Picture.Assign(nil); if not FiledX.IsNull then begin try//如果是Jpeg格式 BS := TBlobStream.Create(TBlobField(FiledX), bmRead); JpegImage := TJpegImage.Create; JpegImage.JPEGNeeded; JpegImage.LoadFromStream(BS); ImagX.Picture.Assign(JpegImage); JpegImage.Free; BS.Free; except//如果是BMP格式 BS := TBlobStream.Create(TBlobField(FiledX), bmRead); B:=Tbitmap.Create; b.LoadFromStream(BS); ImagX.Picture.Assign(b); B.Free; BS.Free; end; end; end; //保存图片 use jpeg,Clipbrd、、、、、、、、、、、、、 //Save to database Image1.Picture.LoadFromFile('FileName'); if not (Image1.Picture.Graphic Is TBitmap) then begin ClipBoard.Assign(Image1.Picture); Image1.Picture.Bitmap.Assign(ClipBroad); ClipBoard.Clear; end;//Change the picture that's not belonged to .bmp to .bmp // picture Table1.Edit; Table1.FieldByName('Image').Assign(Image1.Picture); Table1.Post; //get from database Image1.Picture.Bitmap.Assign(TPicture(Table1.FieldByName('Image'))); 一般来说DBimage控件用来读取图象数据比较方便,但保存时就比较麻烦,建议使用image 例:procedure TForm1.ButtonClick(Sender:TObject) Var Picture1:Tpicture; begin Picture1:=Tpicture.Create; try try if FileExists(Edit1.text) then with table1 do begin Picture1.loadFromFile(Edit1.text); if FindKey([ExtractFilename(edit1.text)])=False then begin IndexfieldNames:='Names'; Table1.Insert; Fields[0].asstring:=ExtractFileName(Edit1.text); Fields[1].Asstring(Picture1); Showmessage('ok!!'); end else showmessage('no!'); end; finally picture1.Free;
ADODataSet1.Open;
ADODataSet1.Edit;
TBlobField(ADODataSet1.FieldByName('photo')).LoadFromFile('C:\aa.jpg');
ADODataSet1.Post;从数据库中读图片
ADODataSet1.Open;
TBlobField(ADODataSet1.FieldByName('photo')).SaveToFile('C:\aa.jpg');
Image1.Hide;
Image1.Picture.LoadFromFile('C:\aa.jpg');
Image1Show;以上代码在delphi6+oracle8.1.6中通过测试
var
MS:TMemoryStream;
begin
MS:=TMemoryStream.create;
image1.Picture.Bitmap.SaveToStream(MS);
MS.Position:=0;
adoquery1.Insert;
TBlobField(adoquery1.FieldbyName('tp')).LoadFromStream(MS);
adoquery1.Post;
end;
问题是各种图片都存的,不知道是jpg,bmp还是gif的
TBlobField(ADODataSet1.FieldByName('photo')).SaveToFile('C:\aa.jpg');如果是bmp或者gif就不可以了
请再指教一下
to allan2002(丸子)
存入是可以的,现在想取出来,谢谢再考虑一下
TBlobField(ADODataSet1.FieldByName('photo')).SaveToFile('C:\aa.jpg');
TBlobField(ADODataSet1.FieldByName('photo')).SaveToFile('C:\aa.bmp');
TBlobField(ADODataSet1.FieldByName('photo')).SaveToFile('C:\aa.gif');
//查看图片
procedure TDM.ViewPhoto(ImagX:TImage;FiledX:TBlobField);
var
B:Tbitmap;
JpegImage:TJpegImage;
BS:TBlobStream;
begin
ImagX.Picture.Assign(nil);
if not FiledX.IsNull then begin
try//如果是Jpeg格式
BS := TBlobStream.Create(TBlobField(FiledX), bmRead);
JpegImage := TJpegImage.Create;
JpegImage.JPEGNeeded;
JpegImage.LoadFromStream(BS);
ImagX.Picture.Assign(JpegImage);
JpegImage.Free;
BS.Free;
except//如果是BMP格式
BS := TBlobStream.Create(TBlobField(FiledX), bmRead);
B:=Tbitmap.Create;
b.LoadFromStream(BS);
ImagX.Picture.Assign(b);
B.Free;
BS.Free;
end;
end;
end;
//保存图片
use jpeg,Clipbrd、、、、、、、、、、、、、
//Save to database
Image1.Picture.LoadFromFile('FileName');
if not (Image1.Picture.Graphic Is TBitmap) then
begin
ClipBoard.Assign(Image1.Picture);
Image1.Picture.Bitmap.Assign(ClipBroad);
ClipBoard.Clear;
end;//Change the picture that's not belonged to .bmp to .bmp
// picture
Table1.Edit;
Table1.FieldByName('Image').Assign(Image1.Picture);
Table1.Post;
//get from database
Image1.Picture.Bitmap.Assign(TPicture(Table1.FieldByName('Image')));
一般来说DBimage控件用来读取图象数据比较方便,但保存时就比较麻烦,建议使用image
例:procedure TForm1.ButtonClick(Sender:TObject)
Var
Picture1:Tpicture;
begin
Picture1:=Tpicture.Create;
try
try
if FileExists(Edit1.text) then
with table1 do
begin
Picture1.loadFromFile(Edit1.text);
if FindKey([ExtractFilename(edit1.text)])=False then
begin
IndexfieldNames:='Names';
Table1.Insert;
Fields[0].asstring:=ExtractFileName(Edit1.text);
Fields[1].Asstring(Picture1);
Showmessage('ok!!');
end
else
showmessage('no!');
end;
finally
picture1.Free;
end;
Except
showmessage('no!');
end;
end;
如果要用image的话,把存入代码改一下就好了!
同意 ehom(?!) 的看法!我发现,现在的程序员都不去了解深层方面的原理,要不就是找代码,用控件,我觉得这样虽然能够解决问题,但无法解决根本的问题!起不到举一反三的作用
begin
MS:=TMemoryStream.create;
image1.Picture.Bitmap.SaveToStream(MS);
MS.Position:=0;
adoquery1.Insert;
TBlobField(adoquery1.FieldbyName('tp')).LoadFromStream(MS);
adoquery1.Post;
end;丸子说的 有效!!!
我 用过
var Buffer:Word;Stream.Seek (0, soFromBeginning);
Stream.Read(Buffer,4);异常机制对GIF当然有效,什么是异常?就是打不开出错!不过如果该解析GIF的类在不是GIF格式时不抛出异常,认为它不错,我也没办法!你找编该控件的作者算帐吧!
楼上,斑竹大人记得我吧?你以关键字“图片存取”搜索大类小类。看看有几个帖子是能打开的?虽然问题问过很多次,但能看到答案的还真不多!
l_xiaofeng(流水不腐) = 楼晓峰??
参数说明:
img:你要显示图片的image。
adoq:数据集。
field:包含图片的字段。
附保存图片的过程,也许有用哦,嘻嘻。procedure showpicture(img: Timage; ADOQ: TADOQuery; field: string);
var MS: Tmemorystream;
begin
if not ADOQ.FieldByName(field).isnull then
begin
MS := TMemoryStream.Create;
try
TBlobField(ADOQ.FieldByName(field)).SaveToStream(MS);
MS.Position := 0; //注意
try
img.Picture.Graphic.LoadFromStream(MS);
except
//如果格式无效,则显示默认图片
on EInvalidGraphic do
img.Picture.Graphic := fmain.Image4.Picture.Graphic;
end;
finally
MS.Free;
end;
end
else
begin
MS := TMemoryStream.Create;
try
fmain.Image4.Picture.Graphic.SaveToStream(MS);
MS.Position := 0; //注意
img.Picture.Graphic.LoadFromStream(MS);
finally
MS.Free;
end;
end;
end;procedure savepicture(img: Timage; ADOQ: TADOQuery; field: string);
var photo: Tmemorystream;
begin
photo := Tmemorystream.create;
img.Picture.graphic.savetoStream(photo);
Tblobfield(ADOQ.FieldByName(field)).loadfromstream(photo);
photo.Clear;
end;