Краска на TGPImage программно - PullRequest
0 голосов
/ 28 января 2019

Может ли TGPImage быть загружен из PNG-файла или ресурса

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

, а затем изменен путем рисования на нем, например, с использованием canvas?

Или, лучше сказать, я былюблю рисовать фон, используя программные методы, а затем загружать изображение из PNG над моей картиной, чтобы работать с этим объединенным изображением как одно тело TGPImage.

. Я посмотрел на методы и свойства TGPImage ине нашел инструментов рисования.

Могу ли я сделать это, используя 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 Ответ

0 голосов
/ 28 января 2019

Для этого вам не нужно TBitmap.
Вам просто нужно использовать TGPGraphics, связанный с TGPImage, чтобы рисовать на поверхности TGPImage.

Вот очень простой пример:

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;
...