大虾们,缩放问题急救(200分)

  • 主题发起人 主题发起人 kokoboy
  • 开始时间 开始时间
K

kokoboy

Unregistered / Unconfirmed
GUEST, unregistred user!
我在Tform上放了一个ScollBOX,在ScollBOX放了一个Paintbox,Paintbox尺寸比ScollBOX大,目的是有滚动条.现在在Paintbox上用Paintbox.canvas画了一些图(比圆和直线复杂一些的图),现在想放大,缩小,,怎么实现.
 
图形本身的放大缩小是另外处理的,放ScrollBox的作用也只是响应消息而已,自己在内存里面需要保存一个TBitMap,放大的时候用TCanvas.StretchDraw或者TCanvas.CopyRect,把TBitMap的东西画出来,TBitMap就是原图,我相你在内存应该会保留一份,否则窗口一刷新,图片就都没有了,
 
怎么把Paintbox.canvas画了一些图保存在TBitMap上.
我这样试过
Bitmap := TBitmap.Create;
rect1.Left:=0;
rect1.Top:=0;
rect1.Right:=paintbox1.Width;
rect1.Bottom:=paintbox1.Height;
Bitmap.Canvas.CopyRect(rect1,paintbox1.canvas,rect1);
rect2.Left:=0;
//round(paintbox1.Width-paintbox1.Width*5/6);
rect2.Top:=0;
//round(paintbox1.Height-paintbox1.Height*5/6);
rect2.Right:=round(paintbox1.Width*5/6);
rect2.Bottom:=round(paintbox1.Height*5/6);
paintbox1.canvas.StretchDraw(rect2,Bitmap);
可是没有画出来..

能不能给个例子..谢谢
 
Bitmap := TBitmap.Create;
BitMap.width := Paintbox1.Width;
BitMap.Height := PaintBox1.Height;// 这里很关键,否则bitmap是个点[:D]
rect1.Left:=0;
rect1.Top:=0;


----------------------------------
procedure TForm1.Button2Click(Sender: TObject);
begin
PaintBox1.Canvas.TextOut(100, 100, '3432434343');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
rect1, rect2 : TRect;
begin
rect1.Left:=0;
rect1.Top:=0;
rect1.Right:=paintbox1.Width;
rect1.Bottom:=paintbox1.Height;
FBitmap.Canvas.CopyRect(rect1,paintbox1.canvas,rect1);
rect2.Left:=0;
rect2.Top:=0;
rect2.Right:=round(paintbox1.Width*5/6);
rect2.Bottom:=round(paintbox1.Height*5/6);
paintbox1.canvas.StretchDraw(rect2,FBitmap);
end;

constructor TForm1.Create(AOwner: TComponent);
begin
inherited;
FBitMap := TBitmap.Create;
FBitMap.Width := PaintBox1.Width;
FBitMap.Height := PaintBox1.Height;
end;

destructor TForm1.Destroy;
begin
FBitMap.Free;
inherited;
end;
 
我用了CopyRect只能拷贝和屏幕一样的区域.关键是我的Paintbox尺寸比ScollBOX大.我的Paintbox的Width和Height都是10000.
 
接受答案了.
 

Similar threads

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