2010-11-13 76 views

回答

1

您可以在目标设备上下文中选择一个椭圆/多边形剪辑区域,然后照常使用BitBlt。

var 
    Rgn: HRGN; 
    Points: array[0..2] of TPoint; 
begin 
    //Rgn := CreateEllipticRgn(0, 0, 100, 100); 

    Points[0] := Point(0, 0); 
    Points[1] := Point(50, 50); 
    Points[2] := Point(50, 0); 
    Rgn := CreatePolygonRgn(Points, 3, WINDING); 

    SaveDC(Canvas.Handle); 
    SelectClipRgn(Canvas.Handle, Rgn); 
    DeleteObject(Rgn); // SelectClipRgn copies the region 

    BitBlt(Canvas.Handle, 0, 0, 100, 100, BmpDC, 0, 0, SRCCOPY); 

    RestoreDC(Canvas.Handle, -1); 
end; 
+0

看来SaveDC或RestoreDC并不是真的有必要。因为我们不改变画笔,字体等来恢复它。 – bman 2010-11-13 14:53:08

+0

但是你改变了剪辑区域。您可以使用GetClipRgn获取当前剪辑区域,或者可以调用“SelectClipRgn(Canvas.Handle,0)”在作业完成后删除任何剪辑区域。 – 2010-11-13 17:47:42

相关问题