Skia4Delphi 4.0.1 from November 06, 2022
Cross-platform 2D graphics API based on Google’s Skia Graphics Library.
It provides a comprehensive 2D API that can be used across mobile,
server and desktop models to render images.
https://altd.embarcadero.com/getit/public/libraries/Skia4Delphi/Skia4Delphi-20221106.zip
简介
Skia 是一个 2D 库,画图性能非常好。是由 Google 开源出来的。
在 Delphi 里面如何使用这个 2D 库,来利用它提供的一些好处?
有一个开源的项目,Skia4Delphi 很好地解决了这个问题。它使得 Delphi 的 VCL 程序和 FMX 程序都能利用 Skia 库来画 2D 图。比如,可以用 Delphi 的程序来显示 WebP 这种格式的图,SVG 的图,等等。当然,Skia 还有很多 2D 图的算法。
这个开源项目在:
https://github.com/skia4delphi/skia4delphi
在 Delphi 里面,也可以通过 IDE 的 GetIt 菜单来安装它。
简单的使用测试
首先,它自己带的例子程序,非常棒。基本上演示了所有功能。想要知道如何使用,看例子程序的代码就可以了。
我的测试
我测试了 FMX 的程序。在 Delphi 里面,自己新建一个跨平台项目,这样就创建了一个基于 FMX 的程序。
拖一个 TArc 到界面上,设置其 Stroke 属性的 Kind 为 Gradient,同时设置其 Gradient 属性(鼠标点击属性面板上对应条目右边的小按钮,弹出设置窗口)对应的开始颜色和结束颜色。马上就可以在设计期的屏幕上,看到一个半圆弧,颜色是渐变色的。为了看得明显,设置 Stroke 的 Thickness 属性为 10,它的线条变粗。
编译目标平台设置为 WIN32,点 IDE 的运行按钮,Delphi 将这个程序编译为 Windows 程序并运行,从运行的程序上看,这个半圆和设计期屏幕上看到的一样。
编译目标平台设置为 Android,把手机插到电脑上,点 IDE 的运行按钮,稍等一会后,APP 在手机上安装并运行。这时候我们会发现,这个半圆,在手机屏幕上,是黑色的。和设计期设置的渐变色没有丝毫关系。这是我使用 Delphi 10.4.2 得到的结果。这个应该是 FMX 的一个 BUG。不知道截止目前为止最新的 Delphi 11 解决了这个问题没有。另外,手机屏幕上的这个半圆,不平滑,仔细看,似乎是折线拼凑的,而不是一个圆滑的半圆。
当把这个测试程序,改为使用 Skia 库来画图以后,这个半圆在我的安卓手机上,显示正常。渐变颜色正常,也非常平滑。
如何让程序支持 Skia
工程的源文件增加 Skia 的相关声明代码,例子如下:
program test;
uses
System.StartUpCopy,
FMX.Forms,
Skia.FMX, //--- 这里增加一行
Unit1 in 'Unit1.pas' {Form1},
UFrameGauge in 'UFrameGauge.pas' {FrameGauge: TFrame},
UFrameIntf in 'UFrameIntf.pas';
{$R *.res}
begin
GlobalUseSkia := True; //这里增加一行
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
GlobaUseSkia 这一行加上后,FMX 的其它图形控件,不用修改代码,也自动变为使用 Skia 库画图。当然,Skia4Delphi 安装在 IDE 里面后,控件面板上会出现一些 Skia 自己的控件,有一些和 FMX 自己带到控件不一样的功能,可以通过 Skia4Delphi 自己带到例子代码去查看都有些什么新功能。
我的测试程序就是加上这个声明以后,让 FMX 原来的 TArc 在安卓上变正常了。
另外,还需要在 IDE 窗口右边的 Projects 窗口里面,选择这个工程的名字,鼠标右键下拉菜单里面,有一个 Enable Skia 的菜单(我通过 GetIt 安装的,可能它自动增加了这个菜单),选择这个菜单。
编译目标平台如果是安卓,选择上述菜单后,从 IDE 的 Project -> Deployment 菜单出来的窗口里面,可以看到增加了两个 libsk4d.so 被添加到需要 delply 的文件列表里面了。如果没有这两个文件一起发布,则 APP 在手机上运行会闪退。这两个 libsk4d.so 来自安装后的 Skia4Delphi 的文件夹里面。
关于 iOS,Skia4Delphi 的官方说法是支持 iOS 的。下载的 Skia4Delphi 的文件夹底下,也有 iOS 的 库。但是,在 Delphi 10.4.2 里面把程序的编译目标设置为 iOS 然后 Build 会弹出 Skia4Delphi 不支持当前这个 Delphi 版本的警告窗口,编译失败。不知道最新版的 Delphi 11 是不是解决了这个问题。当然,在 iOS 底下,可以使用苹果官方的图形库 Metal,在上述 GlobalUseSkia 的那行代码的位置,写成 GlobalUseMetal := True 我猜应该可以解决 FMX 自己的画图算法有问题的 BUG,在 iOS 底下是否可以解决圆弧不圆滑的问题,没有测试。
One More Thing
Skia4Delphi 这个项目自己带到例子,在 \Ski4Delphi\Samples\Demo\FMX\Projects 底下,它的例子程序在 Win32 和 Android 底下我编译运行成功。看这个例子的源代码,其代码框架非常有意思,值得仔细分析和学习。下次有时间写一下这个代码框架的有意思之处。