【问题标题】:How to copy ellipse or polygon from one bitmap to another bitmap如何将椭圆或多边形从一个位图复制到另一个位图
【发布时间】:2011-05-09 11:16:53
【问题描述】:

如何将椭圆或多边形从一个位图复制到另一个位图。 BitBlt 仅对复制矩形有用。

我目前使用 GDI,但如果使用 GDI+ 更容易,我可以使用它。我只需要一个一般性的指导来告诉我正确的方向。

【问题讨论】:

    标签: delphi gdi


    【解决方案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;
    

    【讨论】:

    • 看来 SaveDC 或 RestoreDC 并不是真正需要的。因为我们并没有改变画笔、字体等来恢复它。
    • 但是你改变了剪辑区域。您可以使用 GetClipRgn 获取当前剪辑区域,也可以在工作完成后调用“SelectClipRgn(Canvas.Handle, 0)”删除任何剪辑区域。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 2016-08-05
    • 2015-11-17
    • 1970-01-01
    相关资源
    最近更新 更多