在oracle8.x +delphi5 环境中我写了下边程序,
增加部分
procedure TqxxpForm.TlbAddClick(Sender: TObject);
Var
FileExt:String;
jpeg1:TJPEGImage;
stream: TBlobStream;
TempJPEG:TJPEGImage;
S:String;
TempBool:Boolean;
begin //CheckQuery(curquery,'');
if qxbh='' then Exit;
OPenDlg.Filter := '(*.bmp)|*.bmp|(*.jpg)|*.jpg|(*.jpeg)|*.jpeg';
If OPenDlg.Execute=False then Exit;
FileExt:=ExtractFileExt(OPenDlg.FileName);
if FileExt<>'.jpeg' then
Begin
TempJPEG:= TJPEGImage.Create;
try
img.Picture.LoadFromFile(OPenDlg.FileName);
TempJPEG.Assign(img.Picture.Graphic);
s:= ChangeFileExt(OPenDlg.FileName,'.jpeg');
TempJPEG.SaveToFile(S);
finally
TempJPEG.Free;
end
end
else
begin s:=OPenDlg.FileName;
IMg.Picture.LoadFromFile(s);
end;
jpeg1:=TJPEGImage.Create;
jpeg1.LoadFromFile(s);
//检查是否已经有照片 if not (Qry1.State in [dsInsert, dsEdit]) then
begin
Qry1.Active :=true;
Qry1.APPEND;
end;
Qry1.FieldByName('qxbh').value:= qxbh;
try
stream:=TBlobStream.Create(Qry1.fieldbyname('zp') as TBlobField,bmReadWrite);
jpeg1.SaveToStream(stream);
finally
stream.Free;
end;
qry1.Post ;
//TlbRefClick();
TlbRefClick(TlbRef);
end;
显示部分
OpenQry1;
Qry1.First;
i :=0;
while not Qry1.Eof do
begin
image :=TMyimage.Create(self);
image.Parent :=ScrollBox;
image.ShowHint :=true;
image.qxbh :=Qry1.fieldbyname('qxbh').AsString;
image.xh :=Qry1.fieldbyname('xh').AsInteger;
image.xh1 :=Qry1.fieldbyname('xh1').AsInteger;
//image.Name :='image'+inttostr(i);
image.Visible :=true;
image.Height :=137;
image.Width :=105;
image.AutoSize :=false;
image.Stretch :=true;
image.Align :=altop;
{
if i=0 then
image.Align :=alclient
else
image.Align :=alleft;
//image.Left := image.Width*i;
}
try
stream:=TBlobStream.Create(Qry1.fieldbyname('zp') as TBlobField,bmRead);
jpeg:=TJPEGImage.Create ;
jpeg.LoadFromStream(stream);
image.Picture.Assign(jpeg); finally
stream.Free ;
jpeg.Free;
end;
inc(i);
Qry1.Next;
end;
问题是图片小的时候能正常显示但图片大于1M后图片只显示部分,
我想在保存前先进行压缩再保存,如何实现,请高手指点
增加部分
procedure TqxxpForm.TlbAddClick(Sender: TObject);
Var
FileExt:String;
jpeg1:TJPEGImage;
stream: TBlobStream;
TempJPEG:TJPEGImage;
S:String;
TempBool:Boolean;
begin //CheckQuery(curquery,'');
if qxbh='' then Exit;
OPenDlg.Filter := '(*.bmp)|*.bmp|(*.jpg)|*.jpg|(*.jpeg)|*.jpeg';
If OPenDlg.Execute=False then Exit;
FileExt:=ExtractFileExt(OPenDlg.FileName);
if FileExt<>'.jpeg' then
Begin
TempJPEG:= TJPEGImage.Create;
try
img.Picture.LoadFromFile(OPenDlg.FileName);
TempJPEG.Assign(img.Picture.Graphic);
s:= ChangeFileExt(OPenDlg.FileName,'.jpeg');
TempJPEG.SaveToFile(S);
finally
TempJPEG.Free;
end
end
else
begin s:=OPenDlg.FileName;
IMg.Picture.LoadFromFile(s);
end;
jpeg1:=TJPEGImage.Create;
jpeg1.LoadFromFile(s);
//检查是否已经有照片 if not (Qry1.State in [dsInsert, dsEdit]) then
begin
Qry1.Active :=true;
Qry1.APPEND;
end;
Qry1.FieldByName('qxbh').value:= qxbh;
try
stream:=TBlobStream.Create(Qry1.fieldbyname('zp') as TBlobField,bmReadWrite);
jpeg1.SaveToStream(stream);
finally
stream.Free;
end;
qry1.Post ;
//TlbRefClick();
TlbRefClick(TlbRef);
end;
显示部分
OpenQry1;
Qry1.First;
i :=0;
while not Qry1.Eof do
begin
image :=TMyimage.Create(self);
image.Parent :=ScrollBox;
image.ShowHint :=true;
image.qxbh :=Qry1.fieldbyname('qxbh').AsString;
image.xh :=Qry1.fieldbyname('xh').AsInteger;
image.xh1 :=Qry1.fieldbyname('xh1').AsInteger;
//image.Name :='image'+inttostr(i);
image.Visible :=true;
image.Height :=137;
image.Width :=105;
image.AutoSize :=false;
image.Stretch :=true;
image.Align :=altop;
{
if i=0 then
image.Align :=alclient
else
image.Align :=alleft;
//image.Left := image.Width*i;
}
try
stream:=TBlobStream.Create(Qry1.fieldbyname('zp') as TBlobField,bmRead);
jpeg:=TJPEGImage.Create ;
jpeg.LoadFromStream(stream);
image.Picture.Assign(jpeg); finally
stream.Free ;
jpeg.Free;
end;
inc(i);
Qry1.Next;
end;
问题是图片小的时候能正常显示但图片大于1M后图片只显示部分,
我想在保存前先进行压缩再保存,如何实现,请高手指点
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货