Skia4Delphi - RAD Studio
サード パーティ製ソフトウェア アドイン への移動
Skia4Delphi は、 Google の Skia グラフィック ライブラリに基づく、Delphi および C++Builder 用のクロスプラットフォーム 2D グラフィック API です。 モバイル、サーバー、デスクトップ モデルでイメージをレンダリングするために使用できる包括的な 2D API を提供し、すべての RAD Studio フレームワーク(コンソール、FMX、VCL)およびプラットフォームと互換性があります。
OpenGL、Vulkan、DirectX、Metal などの背後で使用される低レベル ライブラリの実装の複雑さを抽象化し、最適化と新機能を実装することで、共通の 2D API を提供します。
ライブラリはすべてのフレームワークと互換性がありますが、一部の機能は独自のものです:
機能セット | コンソール | VCL | FMX | 説明 |
---|---|---|---|---|
Skia API |
![]() |
![]() |
![]() |
単一のユニットを介してピュア Skia ライブラリにアクセスします: System.Skia.pas(または System.Skia.hpp) |
コントロール |
![]() |
![]() |
TSkAnimatedImage、TSkLabel、TSkPaintBox、TSkSvg | |
アプリのレンダリング |
![]() |
FMX グラフィック エンジンを Skia に置き換え |
目次
Skia を有効にする
Skia の機能やユニットを使用する前に、プロジェクトで Skia を使用できるようにする必要があります。これを行うには、RAD Studio でプロジェクトを開き、プロジェクトを右クリックして[Skia を有効にする]をクリックします:
この有効化はアプリケーションに対してのみ行われます。Skia を使用するパッケージではこれを有効にする必要はありません。
この手順では、ライブラリ バイナリのプロジェクトへのリンクと配置を、自動的に設定します。Skia を有効にせずにそのユニットを使用すると、アプリケーションの起動時に問題が発生します。
主な機能
機能 | 詳細 |
---|---|
2D 描画 |
図形、パス、テキスト |
SVG |
レンダリングと作成 |
画像デコーダ |
BMP、GIF、ICO、JPG、PNG、WBMP、WEBP および RAW 画像 |
画像エンコーダ |
PNG、JPG、WEBP |
アニメーション プレーヤ |
Lottie、Telegram Stickers、アニメーション GIF、アニメーション WEBP |
アンチエイリアス |
高品質描画、なめらかエッジ |
フォント |
フォントの太さ、ファミリ フォールバック、カスタム フォント(インストールなし)、合字 |
テキスト |
複数のスタイル、最大行数、行間隔、両端揃えテキスト、テキスト アウトライン、グラデーション、装飾 |
右から左へ読む言語 |
ペルシア語、アラビア語、ヘブライ語などのテキストのレンダリング |
|
ベクトル化された PDF の生成 |
Unicode |
グラフィム パーサー |
フィルタ |
色、マスク、画像フィルタ |
切り抜き |
高度な切り抜き操作(パスやシェーダなど)の多くをサポート |
グラデーション |
線状、放射状、スイープ、円錐状のグラデーション |
シェーダ |
単一のシェーダ言語(SkSL)を介して、GPU 上で特定の描画を直接実行するシェーダの作成 |
コントロール
Skia ライブラリ インテグレーションには、特殊なネイティブ コントロールとコンポーネントがあり、Skia が有効化されターゲット プラットフォームに配置されている場合にのみ利用可能になります。
TSkAnimatedImage
TSkAnimatedImage は、アニメーション画像(ベクタ アニメーションを含む)の読み込みやレンダリングを、非常にシンプルな方法で行うコントロールです。サポートされている形式は次のとおりです:
形式 | 拡張子 |
---|---|
Lottie ファイル |
.json、.lottie |
Telegram Sticker |
.tgs |
アニメーション GIF |
.gif |
アニメーション WebP |
.webp |
コントロールをフォームに追加し、ダブルクリックすると、アニメーション ファイルを読み込むウィンドウが開きます。
TSkLabel
TSkLabel は、Skia でサポートされる新機能の TLabel ではサポートされていなかったか、実装が困難だった次のような機能を実装するものです:
- フォント ファミリ(CSS でのようなフォント フォールバック リスト)
- フォントの太さ
- フォントの傾斜
- テキスト内の複数のスタイルのサポート
- BiDi のサポート(右から左読み)
- 水平方向の位置揃えのサポート
- カスタム フォントのサポート(フォントをイントールせず)
- テキストの一部の背景色のサポート
- 最大行数の制限
- 自動サイズ オプション(幅や高さ)
- 高度な装飾(波線の下線、上線、破線など)、およびその他
TSkPaintBox & TSkAnimatedPaintBox
TSkPaintBox は、OnDraw イベントを使用して、Skia API を使用して画面上に直接ペイントするための理想的なコントロールです。
procedure TForm1.SkPaintBox1Draw(ASender: TObject; const ACanvas: ISkCanvas;
const ADest: TRectF; const AOpacity: Single);
begin
var LPaint: ISkPaint := TSkPaint.Create;
LPaint.Shader := TSkShader.MakeGradientSweep(ADest.CenterPoint,
[$FFFCE68D, $FFF7CAA5, $FF2EBBC1, $FFFCE68D]);
ACanvas.DrawPaint(LPaint);
end;
TSkAnimatedPaintBox は TSkPaintBox コントロールのバリアントであり、アニメーションの継続時間を設定し、OnAnimationDraw イベントを通じて Skia API を使用してこのアニメーションの進行状況を描画できるようにします。
TSkSVG
TSkSvg は、SVG を容易に表示するためのコントロールです。
コントロールをフォームに追加し、ダブルクリックすると、SVG ファイルを読み込むウィンドウが開きます。
Svg.OverrideColor プロパティを使用することで、表示色を変更することができます。
新しい画像コーデック
プロジェクトで Skia を有効にした後、Skia がサポートする新しい画像コーデックが自動的にフレームワークに登録されます。その後、FMX の TBitmap または VCL の TPicture[*] が、WebP といった新しい画像形式を直接読み込み/保存できるようになります。WebP とは、jpg や png の 30% 以上の圧縮を、同じ品質で行う最新のイメージ形式です。アプリのレンダリング
任意で、デフォルトの Canvas を FMX から Canvas をベースとした Skia に置き換えることができます。この機能が一度有効になると、すべての FMX コントロールは Skia ベースの実装を使用して自動的にペイントされます。 これにより、ライブラリ全体と共に、FMX(主にモバイル)の描画のパフォーマンスと品質を向上させることができます。
Skia を利用したアプリのレンダリングの有効化
Skia を利用したアプリのレンダリングを有効にするには、initialization セクションで、グローバル変数 FMX.Skia.GlobalUseSkia を true
に設定します。例を見てみましょう:
uses
System.StartUpCopy,
FMX.Forms,
FMX.Skia,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
GlobalUseSkia := True;
Application.Initialize;
...
- この設定を、Metal の有効化(FMX.Types.GlobalUseMetal を
true
にする)と組み合わせることができます(推奨されます)。この組み合わせは、Skia を使用した Metal 実装をアクティベートし、iOS および macOS においてパフォーマンスをむしろ向上させるためです。 - コントロールといったその他のライブラリ機能は、このオプションの有効化の有無に限らず動作します。
- この有効化は、3D フォームに影響はありません。
描画品質の向上
有効化された Skia を利用したアプリのレンダリングは、描画においてアンチエイリアスが使用されるため、品質が自動的に向上されます(特にモバイル上で)。
アンチエイリアスなし | アンチエイリアスあり |
---|---|
しかし、フォームのレンダリング品質は、よりよいレンダリングやよりよいパフォーマンスを選択することことで、なお詳細調整することができます。これを行うには、フォームの Quality プロパティをシンプルに変更してください。
違い
Skia または GPU ドライバを使用した場合、すべての出力が同じになるわけではありません。既知の違いは次のとおりです:
- Skia は TTextTrimming.Character をサポートしていないため、ライブラリではこのオプションを TTextTrimming.Word として扱います。言い換えると、Skia は「...」のトリミングを追加するために単語の半分をトリミングすることができないため、FMX マッピングでは単語全体をトリミングすることを選択しています。
デモ
Skia デモ FMX - RAD Studio
これは次の場所にあります:
Object Pascal\Multi-Device Samples\Skia4Delphi
CPP\Multi-Device Samples\Skia4Delphi
Skia デモ VCL - RAD Studio
これは次の場所にあります:
Object Pascal\VCL\Skia4Delphi
CPP\VCL\Skia4Delphi
関連項目