代码之家  ›  专栏  ›  技术社区  ›  Paul

以编程方式在tgpimage上绘制

  •  0
  • Paul  · 技术社区  · 6 年前

    可以 TGPImage 从PNG文件或资源加载

    himg := TGPImage.Create('heading.png');
    

    然后像用画布一样在上面画画来修改它?

    或者,更确切地说,我希望使用编程方法绘制背景,然后在我的绘制上方从PNG加载图像,以便将合并图像作为一个实体进行操作。 TGP-图像 .

    我研究了 TGP-图像 找不到绘画工具。

    我可以用这个吗 TBitmap ?

    以下内容不起作用:

    _hbm := TBitmap.Create();
    _hbm.Width := 1000;
    _hbm.Height := 1000;
    _hbm.Canvas.Brush.Color := clBlack;
    _hbm.Canvas.Pen.Color := clBlack;
    _hbm.Canvas.FillRect(Rect(0, 0, 1000, 1000));
    _hgb := TGPBitmap.Create(_hbm.Handle);
    
    ....................
    
    GPGraphics.DrawImage(_hgb, 0, 0, _hgb.GetWidth(), _hgb.GetHeight());
    
    1 回复  |  直到 6 年前
        1
  •  4
  •   kobik    6 年前

    你不需要 TBitmap 为此。
    你只需要使用 TGPGraphics TGPImage 画上 TGP-图像 表面。

    下面是一个非常简单的例子:

    uses GDIPOBJ, GDIPAPI, GDIPUTIL;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      b: TGPBitmap;
      g: TGPGraphics;
      pen: TGPPen;
      encoderClsid: TGUID;
    begin
      b := TGPBitmap.Create('D:\in.png');
      try
        g := TGPGraphics.Create(b);
        try
          pen := TGPPen.Create(MakeColor(255, 255, 0), 3);
          try
            { Draw a yellow Rectangle }
            g.DrawRectangle(pen, MakeRect(0, 0, 200, 200));
            GetEncoderClsid('image/png', encoderClsid);
            b.Save('D:\out.png', encoderClsid);
          finally
            pen.Free;
          end;
        finally
          g.Free;
        end;
      finally
        b.Free;
      end;
    end;