jpeg和数据库的问题,给出完整例子者给200分(100分)

  • 主题发起人 主题发起人 NetBird
  • 开始时间 开始时间
N

NetBird

Unregistered / Unconfirmed
GUEST, unregistred user!
界面上有:BUTTON1,BUTTON2,BUTTON3,IMAGE1,IMAGE2,DATASOUCE1,TABLE1,OPENPICTUEDIALOG1,
我想单击BUTTON1在IMAGE1中调入JPEG图片(从磁盘中调入),单击BUTTON2将图片保存在TABLE的"图片"
字段中,单击BUTTON3再将它从数据库中读到IMAGE2中,不知如何实现?
 
直接读取图片到数据库;
procedure TjewelinputForm.Button1Click(Sender: TObject);
begin
if opendialog1.execute then begin
imagephoto.picture.loadfromfile(opendialog1.filename);
imagephoto.CopyToClipboard;
imagephoto.PasteFromClipboard;
table.post;
end;
end;
库到image
procedure TjewelinputForm.Button1Click(Sender: TObject);
begin
imagephoto.CopyToClipboard;
image2.PasteFromClipboard;
end;

 
请大家注意我要操作的是JPEG图片,谢谢
 
因为DBIMAGE中只能对BMP文件作处理,所以不能直接对JPEG处理。你可以改它的源代码。
在Picture类中RegisterFileFormat('JPEG','JPEG',TJPEGImage)来定义格式,就可以读取
JPEG文件了。你在DBIMAGE中相对应的代码处改一下,应该也可以读和存JPEG了。
 
试试这个消息方式,一定很满意,但是要考虑memo的问题。
if Key=#13 then
begin
SendMessage(Handle,WM_NEXTDLGCTL,0,0);
Key:=#0;
end;
 
装载文件:
dataset.fieldbyname('photo').loadfromfiile(filename);
image1.picture.graphic.loadfromfile(filename);

从数据库装载

var
bm:tblobstream;
jp:tjpegimage;
begin
bm:=tblobstream.create(dateset.fieldbyname('photo'),bmread);
if bm.size>0 then
begin
jp:=tjpegimage.create;
jp.loadfromstream(bm);
image1.picture.graphic:=jp;
jp.free;
end else
image1.picture.graphic:=nil;
bm.free;
end;

 
调入image1
if OpenPictureDialog1.execute then
MyFileName:=OpenPictureDialog1.FileName;
if FileExists(MyFileName) then begin
image1.Picture.loadfromfile(myfilename);
保存
procedure saveimage;
Var
BlobStream:TBlobStream;
JpegImage:TJpegImage;
begin
try
with Frm_DossierView.query1 do
try
JpegImage:=TJpegImage.Create;
BlobStream:=TBlobStream.Create(TBlobField(FieldByName('WSNR')),bmWrite);
BlobStream.Position:=0;
// BlobStream.Truncate;
JpegImage:=TJpegImage(Frm_DossierView.image1.Picture.Graphic);
JpegImage.SaveToStream(BlobStream);
finally
if Not Assigned(BlobStream) then BlobStream.Free;
if Not Assigned(JpegImage) then JpegImage.Free;
end;
except
end;
end;


读取

procedure loadimage;
Var
BlobStream:TBlobStream;
JpegImage:TJpegImage;
begin
try
BlobStream:=TBlobStream.Create(TblobField(Frm_DossierView.Query1.FieldByName('WSNR')),bmRead);
if BlobStream.Size>0 then
begin
JpegImage:=TJpegImage.Create;
JpegImage.LoadFromStream(BlobStream);
Frm_DossierView.Image1.Picture.Assign(JpegImage);
end
else
Frm_DossierView.Image1.Picture:=nil;
Finally
if Not Assigned(BlobStream) then BlobStream.Free;
if Not Assigned(JpegImage) then JpegImage.Free;
End;
end;
 
JPEG Component控件即可。使用方法和DBImage相似。
if OpenDialog1.Execute then
begin
if (DataModule3.dsProgram.State <> dsEdit) and (DataModule3.dsProgram.State
<> dsinsert) then
DataModule3.dsProgram.Edit;
DBJPEGimage1.Picture.LoadFromFile(OpenDialog1.FileName);
end;
 
JPEG Component控件好用,使用起来像dbimage一样,除了没有源码,还算是比较方便的
 
快急死我了!领导这星期要货!
虽然大家都很热心,但以上代码都不能通过编译.
To 千中元:
哪里可以找到DBjpeg控件?
 
呵呵,hongs比我的速度快,那我就不发给你了.
 
我也想知道:)
 
多人接受答案了。
 
to honghs:

可以发给我一个吗?我正需要呢!
 
同志哥啊,现在大富翁查不了别人的email,只好你发个邮件给我,我再按地址发给你了
hhs@hi.com.cn
 
后退
顶部