Direct2D を利用する - Delphi 2010
Delphi2010の新機能のDirect2Dを試してみます。
TDirect2DCanvasはコンポーネントが用意されているわけではなく、TDirect2DCanvasをコード中で作成し、コンストラクタの引数に描画先のCanvasクラスを与えます。
以後、TDirect2DCanvasクラスを用い画面描画のメソッドを呼び出す形になります。
コードは以下の通り
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Direct2D, D2D1, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
PaintBox1: TPaintBox;
Button1: TButton;
PaintBox2: TPaintBox;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
LD2DCanvas: TDirect2DCanvas;
pa:D2D_POINT_2F;
pb:D2D_POINT_2F;
begin
LD2DCanvas := TDirect2DCanvas.Create(PaintBox1.Canvas, PaintBox1.ClientRect);
LD2DCanvas.RenderTarget.BeginDraw;
LD2DCanvas.RenderTarget.SetAntialiasMode(D2D1_ANTIALIAS_MODE_PER_PRIMITIVE);
LD2DCanvas.RoundRect(10,10,100,100,20,20);
pa.x:=100;
pa.y:=10;
pb.x:=120;
pb.y:=120;
LD2DCanvas.DrawLine(pa,pb);
LD2DCanvas.TextOut(120,10,''''Direct2D Test'''');
//LD2DCanvas.RenderTarget.DrawRoundedRectangle(
LD2DCanvas.RenderTarget.EndDraw;
//
PaintBox2.Canvas.RoundRect(10,10,100,100,20,20);
PaintBox2.Canvas.MoveTo(100,10);
PaintBox2.Canvas.LineTo(120,120);
PaintBox2.Canvas.TextOut(120,10,''''Direct2D Test'''');
end;
end.
実行結果は以下の通り。
拡大してみると、アンチエイリアスが効いていることがわかります。
文字列描画に関しては、アンチエイリアスよりClearFontを利用した描画のほうが鮮明に見えるようです。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用