繪圖表面(Graphics, 這在 VCL 體系中叫 Canvas), 在 GdiPlus 中有四種獲取方法:
1、通過窗口句柄獲取;
2、通過窗口的 Canvas.Handle 獲取;
3、通過 GdiPlus 利用 Helper 技術給部分 VCL 對象添加的 ToGPGraphics 方法獲取;
4、通過圖像對象獲取.
本例效果圖:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses GdiPlus, GdiPlusHelpers;
//從窗口句柄獲取 IGPGraphics
procedure TForm1.Button1Click(Sender: TObject);
var
Graphics: IGPGraphics;
Pen: IGPPen;
begin
Graphics := TGPGraphics.Create(Handle);
Pen := TGPPen.Create(TGPColor.Red, 2);
Graphics.DrawEllipse(Pen, 20, 10, 150, 40);
end;
//從 HDC 獲取 IGPGraphics
procedure TForm1.Button2Click(Sender: TObject);
var
Graphics: IGPGraphics;
Pen: IGPPen;
begin
Graphics := TGPGraphics.Create(Canvas.Handle);
Pen := TGPPen.Create(TGPColor.Green, 2);
Graphics.DrawEllipse(Pen, 20, 40, 150, 40);
end;
//使用 GdiPlusHelpers 為 Canvas 添加的 ToGPGraphics 方法獲取 IGPGraphics
procedure TForm1.Button3Click(Sender: TObject);
var
Graphics: IGPGraphics;
Pen: IGPPen;
begin
Graphics := Canvas.ToGPGraphics;
Pen := TGPPen.Create(TGPColor.Blue, 2);
Graphics.DrawEllipse(Pen, 20, 70, 150, 40);
end;
//從圖像建立 IGPGraphics
procedure TForm1.Button4Click(Sender: TObject);
var
GraphicsImg: IGPGraphics;
Pen: IGPPen;
Image: IGPImage;
begin
Image := TGPBitmap.Create(152, 42);
GraphicsImg := TGPGraphics.Create(Image);
Pen := TGPPen.Create(TGPColor.Fuchsia, 2);
GraphicsImg.DrawEllipse(Pen, 0, 0, Image.Width-2, Image.Height-2);
Canvas.ToGPGraphics.DrawImage(Image, 20, 100);
end;
end.