0
如何將一個橢圓或多邊形從一個位圖複製到另一個位圖。 BitBlt僅用於複製矩形。如何將橢圓或多邊形從一個位圖複製到另一個位圖
我目前使用GDI,但如果使用GDI +更容易,我可以使用它。我只需要一個一般的指導就可以讓我知道正確的方向。
如何將一個橢圓或多邊形從一個位圖複製到另一個位圖。 BitBlt僅用於複製矩形。如何將橢圓或多邊形從一個位圖複製到另一個位圖
我目前使用GDI,但如果使用GDI +更容易,我可以使用它。我只需要一個一般的指導就可以讓我知道正確的方向。
您可以在目標設備上下文中選擇一個橢圓/多邊形剪輯區域,然後照常使用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;
看來SaveDC或RestoreDC並不是真的有必要。因爲我們不改變畫筆,字體等來恢復它。 – bman 2010-11-13 14:53:08
但是你改變了剪輯區域。您可以使用GetClipRgn獲取當前剪輯區域,或者可以調用「SelectClipRgn(Canvas.Handle,0)」在作業完成後刪除任何剪輯區域。 – 2010-11-13 17:47:42