Skia4Delphi - RAD Studio の独自の機能

提供: 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;
  ...
メモ: Android での Vulkan バックエンドの設定は、Windows で有効にするのと同じブール値 GlobalUseVulkan を使用してでき、無効にするには False に設定します。

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;
'メモ: Android がターゲットの場合、プロジェクトのオプションで、特定の権限を認証する必要があります。プロジェクトを右クリックして[オプション...] を選択し、[アプリケーション|資格リスト] 'と移動し、[Android ターゲット(すべての設定)]を選択します。最後に、オプション[安全なファイル共有]をオンにします。

独自の用紙サイズや、事前定義されたサイズを選択することができます。デフォルトでは、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] リポジトリにアクセスしてダウンロードしてください。


関連項目