2010-11-13 74 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

相關問題