简介

Skia 是一个 2D 库,画图性能非常好。是由 Google 开源出来的。

在 Delphi 里面如何使用这个 2D 库,来利用它提供的一些好处?

有一个开源的项目,Skia4Delphi 很好地解决了这个问题。它使得 Delphi 的 VCL 程序和 FMX 程序都能利用 Skia 库来画 2D 图。比如,可以用 Delphi 的程序来显示 WebP 这种格式的图,SVG 的图,等等。当然,Skia 还有很多 2D 图的算法。

这个开源项目在:https://github.com/skia4delphi/skia4delphihttps://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;usesSystem.StartUpCopy,FMX.Forms,Skia.FMX,  //--- 这里增加一行Unit1 in 'Unit1.pas' {Form1},UFrameGauge in 'UFrameGauge.pas' {FrameGauge: TFrame},UFrameIntf in 'UFrameIntf.pas';{$R *.res}beginGlobalUseSkia := 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 底下我编译运行成功。看这个例子的源代码,其代码框架非常有意思,值得仔细分析和学习。下次有时间写一下这个代码框架的有意思之处。

Skia4Delphi 在 Delphi 里面利用 Skia 画图相关推荐

  1. Delphi下利用WinIo模拟鼠标键盘详解

    本文最早在编程论坛上发表,文章地址:http://programbbs.com/bbs/view12-17207-1.htm,相关文件可以在上述地址的页面中下载.转载时请注明出处. 前言 一日发现Se ...

  2. delphi中利用Indy的TIdFtp控件实现FTP协议

    2019独角兽企业重金招聘Python工程师标准>>> delphi中利用Indy的TIdFtp控件实现FTP协议版权声明:本文为博主原创文章,未经博主允许不得转载.现在很多应用都需 ...

  3. maltab利用plot画图后更改线条颜色

    在matlab中,利用plot画图默认好像只有八种颜色,分别为:b--蓝色,r--红色,m--品红,k--黑色,g--绿色,c--青色,y--黄色,w--白色.有时候我们画的线条比较多,这几种颜色可能 ...

  4. 办公实用技巧:利用迅捷画图绘制网络拓扑图操作方法介绍

    网络拓扑图,程序设计图,组织结构图等是几种比较常见的流程图主题,使用的人呢比较对并且绘制起来很方便很实用,所以很受大家青睐,所以今天爱跟风的小编就来和大家分享一下网络拓扑图的绘制方法. 绘制工具:迅捷 ...

  5. 利用迅捷画图绘制环型网络拓扑图操作方法介绍

    网络拓扑图是是用传输媒体互联的物理布局,网络拓扑图有几种主要的结构星型结构,环型结构,总线结构,网状结构以及环型结构,今天要分享的是利用迅捷画图绘制网络拓扑图的操作方法介绍. 工具/原料: 浏览器,电 ...

  6. 如何利用Python画图

    一.问题描述 对于刚刚学习编程的同学来说对编程是非常陌生的,对很多的代码也是非常陌生,高中忙于学习的我们甚至可以说是对编程是一无所知,进入大学进入到这个专业才开始接触很多电脑相关的东西才开始接触编程, ...

  7. 如何利用迅捷画图绘制精美思维导图,流程图

    思维导图,流程图的用处是比较广泛的,大到企业,小到家庭很多人只知道有这样的软件但是却从来没有上手操作过,所以今天分享一个可以绘制思维导图以及流程图的在线网站迅捷画图. 工具/原料: 电脑 迅捷画图 绘 ...

  8. R语言利用ggplot画图时调整坐标轴字体大小

    利用ggplot画好图,并把它插入到论文中后,你会发现默认的字体大小12pt太小了,与 LATEX \LaTeX中图的caption大小不匹配,为此,你需要在利用ggplot画图的时候一开始就要调整到 ...

  9. Delphi下利用SendInput模拟鼠标键盘

    前言 发了一篇<Delphi下利用WinIo模拟鼠标键盘详解>(http://programbbs.com/bbs/view12-17207-1.htm),再发一个利用SendInput模 ...

最新文章

  1. zookeeper 进入客户端_对 zookeeper 和 dubbo 问题总结
  2. Sqli-labs less 50
  3. 小程序框架之wepy报错问题
  4. python输入隔行的数组_python-使用间隔掩码numpy数组
  5. vs2010调试运行时弹出对话框:系统找不到指定文件
  6. 前端之BOM和DOM
  7. 大动作!华为海思注册资本从6亿增加到20亿
  8. 目标检测——数据清洗的学习笔记
  9. 电脑开机3秒就重启循环_手机怎么才能投屏到电脑上?3个方法,小屏1秒变大屏,涨知识了...
  10. 软件架构师的12项修炼——关系技能修炼(2)
  11. HD Audio总线驱动加载失败彻底解决!
  12. SDCC 2016讲师、知名JavaScript专家周爱民议题公布:有前端思想的物联网系统架构...
  13. mysql的七种查询命令_MySQL数据库查询指令大全
  14. python编写一个汽车类_Python 类:以汽车为例
  15. [转载]转录组测序分析中cufflinks的使用及问题
  16. jsp制作的个人网站
  17. 为什么工具类App,都要做一个社区?
  18. Windows Server 2008使用无线网卡上网
  19. 关于redis缓存穿透浅析
  20. 佛家经典禅语语录句子

热门文章

  1. 区块链笔记:区块链概念、相关对比、技术特点、CAP定理、FLP定理、价值网络
  2. 页面中实现轮播图效果
  3. ZYNQ图像处理项目——模板匹配数字识别(1)
  4. 瑞吉外卖笔记-后台管理系统
  5. mysql数据同步和数据传输_navicat数据传输和数据同步有什么区别
  6. 移动端监听 video 全屏和退出全屏
  7. Centos7.6 mvn -verson 、mvn package 报错
  8. IBM:蓝色巨人是颓势?还是沉淀?
  9. 多目标规划(数学建模)
  10. 300行HTML+CSS+JS代码实现动态圣诞树