用两个Image实现图片的放大缩小问题 ( 积分: 50 )

  • 主题发起人 主题发起人 lianzhixin_2004
  • 开始时间 开始时间
L

lianzhixin_2004

Unregistered / Unconfirmed
GUEST, unregistred user!
怎么实现一个图片的放大和缩小的显示,Image1里面显示的是原始的图,Image2里面可以显示放大或者缩小一定倍数的图

dCurScale := strtofloat(lb_city.Items.Strings[iCurIndex]);//比例
dWidth:=im1.Width*(1/dcurscale);//放大后的宽度
dHeight:=im1.Height*(1/dcurscale);//放大后的高度
CurScalerect.Left:=0;
CurScalerect.Right:=dwidth;
CurScalerect.top:=0;
CurScalerect.Bottom:=dheight;
im2.Canvas.StretchDraw(CurScalerect,im1.Picture.Bitmap);
这样显示的图是不完全的,如果我切割IM2里面的图像,里面的图片不是完全的,只有左上角的一部分区域。
 
放大/缩小StretchDraw
裁剪 CopyRect区域后调整图像大小
 
这是放大
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
StretchBlt(Image2.Canvas.Handle,0,0,Image2.Width,Image2.Height,
Image1.Canvas.Handle, X-20,Y-20,40,40,SRCCOPY);
image2.Refresh;

end;

缩小和这个类似
 
听说GDI很不错。
 
上边说的代码会引起图像的抖动,如果仅仅是静态图像的放大缩小还是直接使用 im1.Picture.Bitmap.Canvas的CopyRect拷贝出图像然后再用 StretchDraw画到对应位置,记住把im2的Parent的doublebuff开开。
 
Zoom := Max(Bitmap.Width div Width,Bitmap.Height div Height)+1; //4
Width := Bitmap.Width div Zoom; //5
Height := Bitmap.Height div Zoom; //6
Canvas.StretchDraw(Rect(0,0,Width,Height),Bitmap); //7
 
同志们啊,我的图形10000*10000的,
if OpenDialog1.Execute then
begin
edtPicPath.Text := OpenDialog1.FileName;
Try
Jpeg:=TJpegimage.create;
Jpeg.loadfromfile(OpenDialog1.FileName);
im1.Picture.Bitmap.assign(Jpeg);
finally
Jpeg.free;
end;
就这么一段就用2分钟,真郁闷,如果放大了在切割的话,恐怕没有个样子了,我切割的比例256*256的,只要一放大到另外的一个图片上就报错存储空间不足,哪位高手有办法在放大和切割的问题上。
 
我思路放大以后在切割的,用到了
im2.Canvas.StretchDraw(CurScalerect,im1.Picture.Bitmap);
这行来放大的
跟踪就在这里报错误。
哪位有没有新的思路
 
救命啊?最近給Borland中國盯上了!請有正版Delphi使用授權的人幫助一下
QQ:10961560
 
用内存流
 
ysp娃娃
能不能说得具体点啊
 
自己解决了,谢谢大家不过我用内存流 还不清楚
 

Similar threads

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