这样可以实现: procedure TForm1.Button1Click(Sender: TObject); var B: TBitmap; begin B := TBitmap.Create; B.Width := PaintBox1.Width; B.Height := PaintBox1.Height; B.Canvas.CopyRect(B.Canvas.ClipRect, PaintBox1.Canvas, PaintBox1.Canvas.ClipRect); B.Width := B.Width div 2; B.Height := B.Height div 2; PaintBox1.Canvas.CopyRect(PaintBox1.Canvas.ClipRect, B.Canvas, B.Canvas.ClipRect); B.Free; end;
这样吧:(不过我的方法结果不平滑...应该不是好办法) procedure TForm1.Button1Click(Sender: TObject); var R: TRect; begin R := Rect(0,0,PaintBox1.Canvas.ClipRect.Right div 2, PaintBox1.Canvas.ClipRect.Bottom div 2); PaintBox1.Canvas.CopyRect(PaintBox1.Canvas.ClipRect, PaintBox1.Canvas, R); end;
把这段代码加到你的onpaint里面试试var r:TRect; DC:HDC; begin with pbox.Canvas do begin //pbox就是你那个paintbox DC:=Handle; SetMapMode(DC,MM_ISOTROPIC); r=pBox.ClientRect; SetWindowExtEx(DC,r.Right div 2,r.Bottom div 2,nil); //这里div2就是以前的2倍,div 3就是3倍,也可以在这里设置等大然后使用ScaleViewportExtEx进行调整,这样放大的时候曲线比较平滑 SetViewportExtEx(DC,r.Right,r.Bottom,nil); //一下就是你的绘图代码了 .... .... end; end;
这样可以实现:
procedure TForm1.Button1Click(Sender: TObject);
var
B: TBitmap;
begin
B := TBitmap.Create;
B.Width := PaintBox1.Width;
B.Height := PaintBox1.Height;
B.Canvas.CopyRect(B.Canvas.ClipRect, PaintBox1.Canvas, PaintBox1.Canvas.ClipRect);
B.Width := B.Width div 2;
B.Height := B.Height div 2;
PaintBox1.Canvas.CopyRect(PaintBox1.Canvas.ClipRect, B.Canvas, B.Canvas.ClipRect);
B.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
R: TRect;
begin
R := Rect(0,0,PaintBox1.Canvas.ClipRect.Right div 2, PaintBox1.Canvas.ClipRect.Bottom div 2);
PaintBox1.Canvas.CopyRect(PaintBox1.Canvas.ClipRect, PaintBox1.Canvas, R);
end;
r:TRect;
DC:HDC;
begin with pbox.Canvas do begin //pbox就是你那个paintbox
DC:=Handle;
SetMapMode(DC,MM_ISOTROPIC);
r=pBox.ClientRect;
SetWindowExtEx(DC,r.Right div 2,r.Bottom div 2,nil);
//这里div2就是以前的2倍,div 3就是3倍,也可以在这里设置等大然后使用ScaleViewportExtEx进行调整,这样放大的时候曲线比较平滑
SetViewportExtEx(DC,r.Right,r.Bottom,nil);
//一下就是你的绘图代码了
....
....
end;
end;