怎么样读取和存储图象?(50分)

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

suhuayan

Unregistered / Unconfirmed
GUEST, unregistred user!
我的图象格式是Jpg或者Bmp的,数据库是SQL2000,如何往库里面存储图象和读取图象,请大家帮帮忙,急!!!
 
MS:=TMemoryStream.Create;
MS.LoadFromFile('file');
TBlobField(Tbl_minfo.FieldByName('MPhoto')).LoadFromStream(ms);
MS.Free;
 
还有,你要是把图像存在数据库里,数据量越大,打开表的时间越慢。
 
procedure SavePicture();
var
SaveStream:TMemoryStream;
begin
SaveStream:=TMemoryStream.create;
TMemoryStream.loadfromfile('d:/a.jpg');
TBlobField(AdoTable1.fieldbyname('Picture').loadfromStream(SaveStream);
SaveStream.free;
end;

将Image1中的图片保存到数据库:
“Table1.FieldByName('图片').Assign(Image1.Picture.Bitmap);”
将数据库中的图片调出到Image1中:
“Image1.Picture.Assign(TBlobField(Table1.FieldByName('图片')));”

可以啊,sql server image字段的添加
Query2.SQL.Text := 'insert into image_table vaules(:image)';
Query2.ParamByName(':image').LoadFromFile('c:/Files/Note1234.jpg', ftBlob);
//Query2.ParamByName(':image').LoadFromStream(blobstream, ftBlob);
//blobstream 是 一个TBLOBSTREAM变量
Query2.ExecSQL;
 
那么图象的格式有什么限制?怎么去限制?用Assign好像只能存储.bmp格式的,.jpg格式的存储不进去呀,怎么来判断它们的格式呢?
 
to suhuayan

uses jpeg

var
jpg:tjpegimage;
begin
jpg:=tjpegimage.create;
jpg.loadfromfile(filename);
table1.edit;
table1.fieldyname('pic').assign(jpg);
table1.post;
jpg.free;
end;
 
用ExtractFileExt返回扩展名不就可以了吗
if ExtractFileExt(filename)='.jpg' then
...
 
to 吴三桂,你好,我试了一下你的方法,好像不行,没法存进去:(
 
一个利用TBlobStream在数据库中保存BMP和JPG图片的例子,可同时支持这两种格式的图片,并且涉及到利用DBGrid的自绘事件在DBGrid中绘制图片的技巧(使用了Delphi自带的DBDEMOS数据库中的Animals.dbf数据表,SQL数据和本地DBF数据库的操作是一样的)。http://www.aidelphi.com/6to23/Docu/BlobStream.zip
你看看这个合不合你用
 
用 Data Controls里的那个TDBImage存不行吗?
 
有没有简单一点的例子?谢谢大家了
 
刚好我做了一个定时拷贝屏幕的程序。给你看看,数据库存JPG没有任何问题,应该有用。
procedure TForm1.Timer1Timer(Sender: TObject);
var
Fullscreen:Tbitmap;
FullscreenCanvas:TCanvas;
dc:HDC;
My_image: timage;
jp : tjpegimage;
jp_stream : TMemoryStream;

begin
if adodataset1.Active=false then adodataset1.Open;
timer1.Enabled := false;
jp_Stream := TMemoryStream.Create; {建立流}
Jp:=tjpegimage.Create;
Fullscreen := TBitmap.Create; //创建一个BITMAP来存放图象
Fullscreen.Width := screen.width;
Fullscreen.Height := screen.Height;
DC := GetDC (0); //取得屏幕的 DC,参数0指的是屏幕
FullscreenCanvas := TCanvas.Create; //创建一个CANVAS对象
FullscreenCanvas.Handle := DC;
Fullscreen.Canvas.CopyRect
(Rect (0, 0, screen.Width, screen.Height), fullscreenCanvas,
Rect (0, 0, Screen.Width, Screen.Height));
//把整个屏幕复制到BITMAP中
FullscreenCanvas.Free; //释放CANVAS对象
ReleaseDC (0, DC); //释放DC
jp.CompressionQuality:=50;
jp.Assign(FullScreen);
fullscreen.free; //释放bitmap
// jp.SaveToFile('c:/temp.jpg');
jp.SaveToStream(jp_stream);
jp.Free;
adodataset1.Append;
adodataset1.FieldByName('Cap_Time').AsDateTime:=now;
TBlobField(adodataset1.FieldByName('pic')).LoadFromStream(jp_stream);
adodataset1.Edit;
adodataset1.Post;
jp_stream.Free;
timer1.Enabled :=true;
end;
读取图像反过来就行了,有问题再联系。
 
to sikaman:
你好,怎么联系你?我还想问一些问题,请帮帮我,谢谢!
 
QQ:112833843
你在申请我通过时注明是大富翁的朋友
 
读出来可以这样:
procedure TForm1.FormShow(Sender: TObject);
var
my_stream : tmemorystream;
jp : tjpegimage;

begin
my_stream := tmemorystream.Create;
jp:=tjpegimage.create;
if adodataset1.Active=false then adodataset1.Open;
adodataset1.First;
tblobfield(adodataset1.FieldByName('pic')).SaveToFile('c:/windows/temp.jpg');
// tblobfield(adodataset1.FieldByName('pic')).SaveToStream(my_stream);
// jp.LoadFromStream(my_stream);
// jp.SaveToFile('d:/temp.jpg');
jp.LoadFromFile('c:/windows/temp.jpg');
image1.Picture.Bitmap.Assign(jp);
jp.Free;
my_stream.Free;
image1.Show;
end;
变成文件了,你应该会处理了吧
用流的方式没有写好,你自己琢磨吧
 
接受答案了.
 

Similar threads

回复
0
查看
1K
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部