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