Skia4Delphi - RAD Studio の独自の機能
目次
Vulkan バックエンド
RAD Studio での Skia は、Android に対する Vulkan バックエンド サポートを、また任意で Windows に対しても提供します。 RAD Studio を使用した Skia Canvas は Android 上の Vulkan を自動的に利用するため(サポートされている場合)、OpenGLES と比較してグラフィック パフォーマンスとエネルギー効率が向上します。 サポートされている場合に Windows で Vulkan を有効にするには、初期化セクションで ブール値の FMX.Types.GlobalUseVulkan を True に、FMX.Skia.GlobalUseSkiaRasterWhenAvailable を False に設定します。 例を見てみましょう:
uses
System.StartUpCopy,
FMX.Forms,
FMX.Types,
FMX.Skia,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
GlobalUseSkia := True;
GlobalUseSkiaRasterWhenAvailable := False;
GlobalUseVulkan := True;
Application.Initialize;
...
Skia シェーディング言語(SKSL)の効果とフィルタ
ラスタライズではなく GPU アクセラレーションを使用して Skia アプリのレンダリングを使用する場合、FireMonkey はエフェクトとフィルタをレンダリングするために、強力な SKSL を利用します。 この方法は、現在の方法と比較して優れたパフォーマンスを提供するだけでなく、Skia Canvas の効率も高めます。
さらに、エフェクトやフィルタの作成に SKSL を使用する主な利点の 1 つは、メンテナンスが簡素化されることです。 単一のシェーダー コードベースがすべてのプラットフォームで一貫して動作するため、各バックエンドの API に固有のコードの複数記述する必要がなくなり、統一された動作が保証されます。
アニメーション コーデック: WebP エンコーダー
RAD Studio と統合された Skia バージョンは、アニメーション WebP のエンコードをサポートしています。 FireMonkey の新しいアニメーション コーデック基盤を使用すると、エンコードおよび/またはデコードが可能な新しいエンコーダーを登録できます。
WebP は、JPEG に比べて圧縮率が優れているため、Web 上で最も広く使用されている形式の 1 つであり、高品質を維持しながらファイル サイズが小さくなります。 また、GIF に似たアニメーション機能も提供しますが、ロスレス フレームを使用しているため、つまり、品質の損失や圧縮がなくなります。 さらに、透明性もサポートしているため、汎用性の高い形式になります。
例をあげるために、5 つの 400x400 PNG イメージ(フレーム)が、frame1.png、frame2.png、frame3.png、frame4.png、frame5.png、という名前であるとしましょう。各フレームは 80 ミリ秒間隔です。アニメーション WebP を作成するには、まずユニット "FMX.Graphics" と "FMX.Skia" をインクルードし、次のコードを利用します:
uses
FMX.Graphics;
procedure TForm1.Button1Click(Sender: TObject);
begin
var LAnimatedCodec := TAnimatedCodecManager.CreateAnimatedCodec('.webp');
try
for var I := 1 to 5 do
begin
var LBitmap := TBitmap.Create;
try
LBitmap.LoadFromFile(Format('frame%d.png', [I]));
LAnimatedCodec.AddFrame(LBitmap, 80);
finally
LBitmap.Free;
end;
end;
if not LAnimatedCodec.SaveToFile('image.webp') then
raise Exception.Create('Could not save animated WebP.');
finally
LAnimatedCodec.Free;
end;
end;
プリンタ
Skia が有効になっている場合、FireMonkey の Windows 用ネイティブ プリンタは物理プリンタのバックエンドとして Skia を使用し、PDF ドキュメントの印刷を通じて他のすべてのプラットフォームを確実にサポートします。ターゲットが Windows の場合はオプションの XPS 印刷も利用できます。 iOS および Android では、プリンタは印刷可能なファイルを生成し、完了すると自動的に共有されます。
Firemonkey のプリンタを使用するには、次の簡単な例に従います:
uses
FMX.Printer;
procedure TForm1.Button1Click(Sender: TObject);
begin
Printer.BeginDoc;
try
if Printer.Canvas.BeginScene then
try
Form1.PaintTo(Printer.Canvas);
finally
Printer.Canvas.EndScene;
end;
finally
Printer.EndDoc;
end;
end;
独自の用紙サイズや、事前定義されたサイズを選択することができます。デフォルトでは、A4 用紙は設定されていますが、以下の例のデモのように、簡単に変更することができます:
uses
FMX.Printer;
initialization
// Alter the document's paper size
TPrinterDocument.SetDocumentPaper(TDocumentPaper.Letter);
end.
ターゲット デバイスやドキュメント サイズ、複雑度により、UI はそのリソースに特化した操作のために応答が遅くなります。そのような場合、ストリームに直接印刷するよう、バックグラウンド スレッド印刷をすべてのプラットフォームにおいて使用することができます。次の例に示します:
uses
FMX.Printer;
procedure TThread1.Execute;
begin
var LStream := TMemoryStream.Create;
try
var LPrinter := PrinterDocumentClass.Create;
try
LPrinter.BeginDoc(LStream);
try
if LPrinter.Canvas.BeginScene then
begin
try
{ TODO: Draw page 1 }
finally
LPrinter.Canvas.EndScene;
end;
end;
LPrinter.NewPage;
if LPrinter.Canvas.BeginScene then
begin
try
{ TODO: Draw page 2 }
finally
LPrinter.Canvas.EndScene;
end;
end;
finally
LPrinter.EndDoc;
end;
finally
LPrinter.Free;
end;
{ TODO: Something with LStream }
finally
LStream.Free;
end;
end;
C++ Builder のサポート
RAD Studio は、ユーザーの実装を支援するために C++ で作成されたプロジェクトのメイン デモを含む、C++ Builder 用の Skia4Delphi サポートを提供しています。 RAD Studio のインストール中にデモにアクセスするには、サンプルをインストールするか、[Embarcadero の GitHub] リポジトリにアクセスしてダウンロードしてください。