【发布时间】:2011-05-09 11:16:53
【问题描述】:
如何将椭圆或多边形从一个位图复制到另一个位图。 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;
【讨论】: