建一个数据表命名为照片表,含两个字段(照片----image型,序号----int型且递增)。 新建一窗体,含三个按扭(打开按扭,保存按扭,显示按扭),image控件,opendialog和eidt控件。
1.单击打开按扭,图片通过opendialog打开,在image1中显示,代码如下:
opendialog1.execute;
image1.Picture.LoadFromFile(opendialog1.FileName);
2,单击保存按扭,将image1中显示的图片的路径保存到照片表中。
3. 在edit1中输入序号,单击显示按扭,则序号对应的图片显示在image1中。
(注:image1中可以显示bmp,jpg,gif型图片)请教各位大侠,2和3该怎么写,请给出完整代码,谢谢!!
1.单击打开按扭,图片通过opendialog打开,在image1中显示,代码如下:
opendialog1.execute;
image1.Picture.LoadFromFile(opendialog1.FileName);
2,单击保存按扭,将image1中显示的图片的路径保存到照片表中。
3. 在edit1中输入序号,单击显示按扭,则序号对应的图片显示在image1中。
(注:image1中可以显示bmp,jpg,gif型图片)请教各位大侠,2和3该怎么写,请给出完整代码,谢谢!!
解决方案 »
- 请教网页上打开自定义格式文件的控件原理
- 请教一个很奇怪的问题:DbGridEh中,最后编辑的值为什么丢了呢?那个值是在缓冲区里吧?怎么让这个值有效?
- 怎麼樣取得區域網里指寫的文檔里的內容?\\192.168.30.236\IOData\20061016.txt這樣!
- ◆◆◆◆◆散分 做个小调查:你小康了吗?◆◆◆◆◆
- DevExpress控件的安装问题!!!
- 键盘扫描码
- delphil7開發出的程序,用審麼工具可以作安裝程序!!!!!!!!!!!!!!
- 关于 Treeview的问题???
- idhttp有bug !http://www.dell.com/us/en/bsd/topics/us/en/bsd/default.htm无法下载!
- 各位高手:bmp到tif,谢谢
- 这是怎么回事?
- 高手注意啦!小问题,大难题!!!!!
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;
var
pjpg:tjpegimage;
pic:TMemoryStream;
begin
pjpg:=tjpegimage.Create;
pjpg.LoadFromFile(F:\JPG.jpg);
pic:=TMemoryStream.Create;
pjpg.SaveToStream(pic);
pic.Position:=0;
TBlobField(dataset.FieldByName('Img')).LoadFromStream(pic);
dataset.post;
pic.Free;
pjpg.free;
end;
从数据库取出
var
pjpg:tjpegimage;
pic:TMemoryStream;
begin
pjpg:=tjpegimage.Create;
pic:=TMemoryStream.Create;
TBlobField(dataset.FieldByName('Img')).savetoStream(pic);
pic.positon:=0;
pjpeg.LoadFromStream(pic);
image.graphi.bmp.assign(pjpeg);
end;end;
保存时都存不进去啊,而且我要的是针对bmp,jpg,gif类型均可以的图片。
如果有pjpg定义为picture型,pjpg.SaveToStream(pic)时出错,提示pjpg没有savetostream方法,而且即使将pjpg定义为:tjpegimage型数据也存不到数据库中,我是个初学者,请您说得详细些好吗,谢谢!!
begin
pjpg.Graphic.SaveToStream(pic);
我试过了,代码如下:
var
pjpg:tpicture;
pic:TMemoryStream;
begin
adoquery1.Append ;
pjpg:=tpicture.Create;
pjpg.LoadFromFile('F:\f.jpg');
pic:=TMemoryStream.Create;
pjpg.Graphic.SaveToStream(pic);
pic.Position:=0;
TBlobField(adoquery1.FieldByName('照片')).LoadFromStream(pic);
adoquery1.post;
pic.Free;
pjpg.free;运行过程中虽然没有错误,但是数据保存不上。
xp:Tmemorystream;
jpeg:Tjpegimage;
begin
xp:=Tmemorystream.Create;
jpeg:=Tjpegimage.Create;
jpeg.Assign(image1.Picture);
jpeg.SaveToStream(xp);
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('insert into demo (xp) values(:aa)');
adoquery1.Parameters.ParamByName('aa').LoadFromStream(xp,ftblob);
execsql;
end;
image1.Picture.Assign(nil);
end;3:
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('select * from demo where id=:aa');
adoquery1.Parameters.ParamByName('aa').Value:=edit1.text;
open;
end;
if adoquery1.RecordCount<>0 then
begin
xp:=Tmemorystream.Create;
jpeg:=Tjpegimage.Create;
tblobfield(adoquery1.FieldByName('xp')).SaveToStream(xp);
xp.Seek(0,sofrombeginning);
jpeg.LoadFromStream(xp);
image1.Picture.Assign(jpeg);
end;
先谢谢你,可是你的代码只是针对jpeg图片的,如果有bmp,gif类型的图片就执行不过去。
我把你的代码改了一下:
保存:
var
xp:Tmemorystream;
jpeg:tpicture;
begin
xp:=Tmemorystream.Create;
jpeg:=Tpicture.Create;
jpeg.Assign(image1.Picture);
jpeg.Graphic.SaveToStream(xp);
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('insert into 照片表(照片) values(:aa)');
adoquery1.Parameters.ParamByName('aa').LoadFromStream(xp,ftblob);
execsql;
end;
image1.Picture.Assign(nil);
end; 显示:
var
xp:Tmemorystream;
jpeg:Tpicture;
begin
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('select * from 照片表 where 序号=:aa');
adoquery1.Parameters.ParamByName('aa').Value:=edit1.text;
open;
end;
if adoquery1.RecordCount<>0 then
begin
xp:=Tmemorystream.Create;
jpeg:=Tpicture.Create;
tblobfield(adoquery1.FieldByName('照片')).SaveToStream(xp);
xp.Seek(0,sofrombeginning);
jpeg.Graphic.LoadFromStream(xp);
image1.Picture.Assign(jpeg);
end;
end;可是运行显示时总是弹出错误信息,请各位大侠帮我看看,谢谢!!
xp:Tmemorystream;
jpeg:Tjpegimage;
bmp:tbitmap;
buffer:word;
begin
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('select * from 照片表 where 序号=:aa');
adoquery1.Parameters.ParamByName('aa').Value:=edit1.text;
open;
end;
if adoquery1.RecordCount<>0 then
begin
xp:=Tmemorystream.Create;
xp.ReadBuffer(Buffer,2);
xp.Position:=0;
if Buffer=$4D42 then
begin
//BMP bmp:=Tbitmap.Create;
tblobfield(adoquery1.FieldByName('照片')).SaveToStream(xp);
xp.Seek(0,sofrombeginning);
bmp.LoadFromStream(xp);
image1.Picture.Assign(bmp);
end ;
else if Buffer=$D8FF then
begin
//JPEG jpeg:=Tjpegimage.Create;
tblobfield(adoquery1.FieldByName('照片')).SaveToStream(xp);
xp.Seek(0,sofrombeginning);
jpeg.LoadFromStream(xp);
image1.Picture.Assign(jpeg);
end end;
end;但是运行后,显示stream read error的错误信息,请问这是怎么回事?谢谢大家