【Delphi】最新版12中新功能:Skia4Delphi

目录

一、打开:Enabling Skia

二、主要功能:

三:控制:Controls

1. TSkAnimatedImage

2. TSkLabel

3. TSkPaintBox & TSkAnimatedPaintBox

4. TSkSVG

5. New image codecs

四、App render

1. Enabling app rendering using Skia

2. 改变绘图质量:Improved drawing quality

3. 差异

五、See Also


        Skia4Delphi 是基于 Google Skia 图形库的 Delphi 和 C++Builder 跨平台 2D 图形 API。它提供了一个全面的 2D API,可用于在移动、服务器和桌面模型中渲染图像,并兼容所有 RAD Studio 框架(控制台、FMX 和 VCL)和平台。

        它通过抽象实现底层库(如 OpenGL、Vulkan、DirectX、Metal 等)的复杂性,提供了通用的 2D API,并实现了优化和新功能。

        虽然该库兼容所有框架,但有些功能是独一无二的:

Feature setConsoleVCLFMXDescription

Skia API

Allowed.png

Allowed.png

Allowed.png

Access to the pure Skia library, through a single unit: System.Skia.pas (or System.Skia.hpp)

Controls

Allowed.png

Allowed.png

TSkAnimatedImage, TSkLabel, TSkPaintBox and TSkSvg

App render

Allowed.png

Replacement of FMX graphics engine by Skia

一、打开:Enabling Skia

        在使用任何 Skia 功能或单元之前,您必须启用 Skia。为此,请在 RAD Studio 中打开项目,然后右键单击项目并单击启用 Skia:

        这种启用只针对应用程序。使用 Skia 的软件包无需启用此功能。此步骤将自动配置链接和部署到项目的库二进制文件。如果不启用 Skia 并使用其单元,应用程序在启动时就会出现问题。

二、主要功能:

FeatureDetails

2D draws

Shapes, paths and texts

SVG

Render and creation

Image decoders

BMP, GIF, ICO, JPG, PNG, WBMP, WEBP and raw images

Image encoders

PNG, JPG and WEBP

Animations player

Lottie, Telegram Stickers, animated GIF and animated WEBP

Anti-aliasing

High draw quality, no jagged edges

Font

Font weight, families fallbacks, custom font (without installation), ligature

Text

Multiple styles, max lines, line spacing, justified text, text outline, gradient, decorations

Right-To-Left languages

Rendering of texts in Persian, Arabic, Hebrew, etc

PDF

Generation of vectorized PDF

Unicode

Graphemes parser

Filters

Color, mask and image filters

Clippings

Support for many advanced clipping operations such as paths and shaders

Gradients

Linear, radial, sweep and conical gradients

Shader

Creation of shaders to execute specific draws directly on the GPU, through a single shader language (SkSL)

三:控制:Controls

        Skia 库集成有特定的本地控件和组件,只有启用 Skia 并将其部署到目标平台后才能使用。

1. TSkAnimatedImage

        SkAnimatedImage 是一款能以非常简单的方式加载和渲染动画图片(包括矢量动画)的控件。支持的格式有:

FormatExtension

Lottie file

.json, .lottie

Telegram Sticker

.tgs

Animated GIF

.gif

Animated WebP

.webp

        将该控件添加到表单中,双击该控件即可打开加载动画文件的窗口。

2. TSkLabel

        TSkLabel 实现了 Skia 支持的新功能,这些功能要么是 TLabel 不支持的,要么是难以实现的,例如:

  • 字体族;(类似于 css 中的字体回退列表)
  • 字体重量
  • 字体倾斜
  • 支持文本中的多种样式;
  • 支持 BiDi;(从右到左)
  • 支持水平对齐;
  • 支持自定义字体;(无需安装字体)
  • 支持部分文本的背景颜色;
  • 限制最大行数;
  • 自动尺寸选项;(宽度和高度)
  • 高级装饰(如下划线、波浪线、上划线、虚线等)等等

3. TSkPaintBox & TSkAnimatedPaintBox

        TSkPaintBox 是使用 Skia API 通过 OnDraw 事件直接在屏幕上绘画的理想控件:

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 设置动画的持续时间和绘制动画的进度。

4. TSkSVG

TSkSvg 是一款可以轻松显示 SVG 的控件。将该控件添加到表单中,双击该控件即可打开加载 SVG 文件的窗口。使用 Svg.OverrideColor 属性可以更改显示颜色。

5. New image codecs

        在项目中启用 Skia 后,Skia 支持的新图像编解码器会自动在框架中注册。这样,FMX 的 TBitmap 或 VCL 的 TPicture[*] 就能直接加载和保存新的图像格式,如 WebP,它是一种现代图像格式,在质量相同的情况下比 jpg 和 png 多压缩 30%。

四、App render

        可选择将默认画布从 FMX 替换为基于 Skia 的画布。启用该功能后,所有 FMX 控件都将自动使用基于 Skia 的实现方式绘制。这样可以提高 FMX(主要在移动设备上)以及整个库的绘图质量和性能。

1. Enabling app rendering using Skia

        要使用 Skia 启用应用程序渲染,只需在初始化部分将全局变量 FMX.Skia.GlobalUseSkia 设为 true 即可。请看示例:

uses
  System.StartUpCopy,
  FMX.Forms,
  FMX.Skia,
  Unit1 in 'Unit1.pas' {Form1};
 
{$R *.res}
 
begin
  GlobalUseSkia := True;
  Application.Initialize;
  ...

注意事项

  1. 可以(并建议)将此设置与启用 Metal(FMX.Types.GlobalUseMetal 为 true)结合使用,以便在 iOS 和 macOS 上获得更好的性能,因为此组合会使用 Skia 激活 Metal 实现。
  2. 无论是否启用该选项,控件等其他库功能都能正常工作。
  3. 启用该选项对 3D 表单没有影响。

2. 改变绘图质量:Improved drawing quality

        启用 Skia 后,由于绘图中使用了抗锯齿技术,应用程序的渲染效果(尤其是在移动设备上)将自动得到改善:

        不过,您仍然可以对表单的渲染质量进行微调,选择更好的渲染效果或性能。为此,只需更改表单的质量属性即可。

3. 差异

        使用 Skia 或 GPU 驱动程序,并非所有输出都完全相同。以下是一个已知的差异:

        Skia 不支持 TTextTrimming.Character,因此我们的库将此选项视为 TTextTrimming.Word。要说明的是,Skia 无法修剪半个单词以添加"... "修剪,因此 FMX 映射选择修剪整个单词。

五、See Also

[编辑本段]Turbo C2.0    介绍      Turbo C2.0不仅是一个快捷、高效的编译程序,同时还有一个易学、易用的集成开发环境。使用Turbo C2.0无需独立地编辑、编译和连接程序,就能建立并运行C语言程序。因为这些功能都组合在Turbo 2.0的集成开发环境内,并且可以通过一个简单的主屏幕使用这些功能。    基本配置要求   Turbo C 2.0可运行于IBM-PC系列微机,包括XT,AT及IBM 兼容机。此时要求DOS2.0或更高版本支持,并至少需要448K的RAM,可在任何彩、单色80列监视器上运行。支持数学协处理器芯片,也可进行浮点仿真,这将加快程序的执行。 [编辑本段]Turbo C 2.0的主要文件的简单介绍   INSTALL.EXE 安装程序文件   TC.EXE 集成编译   TCINST.EXE 集成开发环境的配置设置程序   TCHELP.TCH 帮助文件   THELP.COM 读取TCHELP.TCH的驻留程序README 关于Turbo C的信息文件   TCCONFIG.EXE 配置文件转换程序MAKE.EXE   项目管理工具TCC.EXE   命令行编译TLINK.EXE   Turbo C系列连接器TLIB.EXE   Turbo C系列库管理工具C0?.OBJ 不   同模式启动代码C?.LIB   不同模式运行库GRAPHICS.LIB   图形库EMU.LIB   8087仿真库FP87.LIB 8087库   *.H Turbo C头文件   *.BGI 不同显示器图形驱动程序   *.C Turbo C例行程序(源文件)   其中:上面的?分别为:T Tiny(微型模式)S Small(小模式)C Compact(紧凑模式)M Medium(中型模式)L Large(大模式)H Huge(巨大模式)    Turbo C++ 3.0   “Turbo C++ 3.0”软件是Borland公司在1992年推出的强大的——C语言程序设计与C++面向对象程序设计 的集成开发工具。它只需要修改一个设置选项,就能够在同一个IDE集成开发环境下设计和编译以标准 C 和 C++ 语法设计的程序文件。 [编辑本段]C 语言   C语言起始于1968年发表的CPL语言,它的许多重要思想都来自于Martin Richards在1969年研制的BCPL语言,以及以BCPL语言为基础的与Ken Thompson在1970年研制的B语言。Ken Thompson用B语言写了第一个UNIX操作系统。M.M.Ritchie1972年在B语言的基础上研制了C语言,并用C语言写成了第一个在PDP-11计算机上研制的UNIX操作系统。1977年出现了独立于极其的C语言编译文本《看移植C语言编译程序》,从而大大简化了把C语言编译程序移植到新环境中所做的工作,这本身也就使UNIX的日益广泛使用,C语言也迅速得到推广。   1983年美国国家标准化协会(ANSI)根据C语言问世以来的各种版本,对C语言的发展和扩充制定了新的标准,成为ANSI C。1987年ANSI又公布了新标准————87ANSI C。   目前在微型计算机上使用的有Microsoft C、Quick C、Turbo C等多种版本。这些不同的C语言版本,基本部分是相同的,但是在有关规定上有略有差异。   C 语言发展如此迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。用C 语言加上一些汇编语言子程序, 就更能显示C 语言的优势了,象PC- DOS ,WORDSTAR等就是用这种方法编写的。归纳起来C 语言具有下列特点:   1. C是中级语言   它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以象汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。   2. C是结构式语言   结构式语言的显著特点是代码及数据的分隔化, 即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调试。C 语言是以函数形式提供给用户的, 这些函数可方便的调用, 并具有多种循环、条件语句控制程序流向, 从而使程序完全结构化。   3. C语言功能齐全   C 语言具有各种各样的数据类型, 并引入了指针概念, 可使程序效率更高。另外C 语言也具有强大的图形功能, 支持多种显示器和驱动器。而且计算功能、逻辑判断功能也比较强大, 可以实现决策目的。   4. C语言适用范围大   C 语言还有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于多种机型。   C语言的优点很多,但是也存在一些缺点,如运算优先级太多,运算能力方面不像其它高级语言那样强,语法定义不严格等。但是这些都不能阻止C语言成为一门广受欢迎的计算机编程语言
Turbo C2.0 介绍   Turbo C2.0不仅是一个快捷、高效的编译程序,同时还有一个易学、易用的集成开发环境。使用Turbo C2.0无需独立地编辑、编译和连接程序,就能建立并运行C语言程序。因为这些功能都组合在Turbo 2.0的集成开发环境内,并且可以通过一个简单的主屏幕使用这些功能。 基本配置要求   Turbo C 2.0可运行于IBM-PC系列微机,包括XT,AT及IBM 兼容机。此时要求DOS2.0或更高版本支持,并至少需要448K的RAM,可在任何彩、单色80列监视器上运行。支持数学协处理器芯片,也可进行浮点仿真,这将加快程序的执行。 主要文件的简单介绍   INSTALL.EXE 安装程序文件   TC.EXE 集成编译   TCINST.EXE 集成开发环境的配置设置程序   TCHELP.TCH 帮助文件   THELP.COM 读取TCHELP.TCH的驻留程序README 关于Turbo C的信息文件   TCCONFIG.EXE 配置文件转换程序MAKE.EXE   项目管理工具TCC.EXE   命令行编译TLINK.EXE   Turbo C系列连接器TLIB.EXE   Turbo C系列库管理工具C0?.OBJ 不   同模式启动代码C?.LIB   不同模式运行库GRAPHICS.LIB   图形库EMU.LIB   8087仿真库FP87.LIB 8087库   *.H Turbo C头文件   *.BGI 不同显示器图形驱动程序   *.C Turbo C例行程序(源文件)   其中:上面的?分别为:T Tiny(微型模式)S Small(小模式)C Compact(紧凑模式)M Medium(中型模式)L Large(大模式)H Huge(巨大模式)
### 回答1: 在 TURBO C 2.0 中,您可以使用 biosdisk() 函数来格式化软盘。 下面是一段代码示例: ``` #include <stdio.h> #include <dos.h> int main() { // 定义扇区的大小 unsigned int sector_size[3] = {512, 512, 1024}; // 定义填充字节 unsigned char fill_char[3] = {0xF6, 0xF6, 0x48}; // 格式化磁道 700 的前三个扇区 for (int i = 0; i < 3; i++) { int result = biosdisk(2, 0, 70, 0, i + 1, 1, sector_size[i], fill_char[i]); if (result != 0) { printf("格式化扇区 %d 失败,返回码: %d\n", i + 1, result); } } return 0; } ``` 请注意,在使用 biosdisk() 函数之前,需要包含 dos.h 头文件。 希望这能帮到您! ### 回答2使用TURBO C 2.0语言,可以通过以下代码格式化软盘的70磁道0面,并分别格式化3个扇区,大小分别为512字节、512字节和1024字节。其中,前两个扇区使用F6填充,第三个扇区使用48填充。 ```c #include<stdlib.h> #include<stdio.h> #include<dos.h> void formatFloppyDisk(){ union REGS regs; regs.h.ah = 0x0;// To format a floppy disk, we set AH=0 regs.h.dl = 0;// Drive number (0=A, 1=B, etc.) regs.x.cx = 0;// Track number to format regs.h.dh = 0;// Head number regs.h.al = 0;// Sector size (0=default, 1=512 bytes, 2=1024 bytes, 3=2048 bytes etc.) int FILL_BYTE = 0;// The byte value to fill the sectors with during formatting int NUM_SECTORS = 3;// Number of sectors to format // To format 70th track 0th head regs.x.ax = 0x1301; // 0x13 = Reset disk system, 01H = Reset only specified drive int86(0x13, &regs, &regs); // BIOS interrupt to reset disk system for (int i=0; i<NUM_SECTORS; i++){ regs.x.ax = 0x3101; // 0x31 = Write Format, 01H = Format only current track regs.x.bx = 0x0001; // 0x00 = Drive A:, 01H = Head 1, 0 = Generate ID Field depending on the disk in the drive 1 = Keep the ID Field all zeros regs.x.cx = 0x0170; // Track number=70(0-79 range) regs.h.dh = 0x00; // Head number=0 or 1 regs.h.al = 0x02; // Control byte=always zero regs.x.dx = i+1; // Sector number starting from 1 regs.x.si = 0x0000; // segment and offset of read/write buffer regs.x.di = 0x0000; // segment and offset of result if(i == 2){ FILL_BYTE = 0x48; // Fill the third sector with 48 regs.x.ax = 0x3102; // 0x31 = Write Format, 02H = Format sequential tracks immediately following the one being formatted }else{ FILL_BYTE = 0xF6; // Fill the first two sectors with F6 } regs.h.ah = FILL_BYTE; // Fill the sector with specified byte int86(0x13, &regs, &regs); // BIOS interrupt to format the specified sector } } int main(){ formatFloppyDisk(); return 0; } ``` 上述代码使用了INT 0x13,即BIOS中断服务例程,来执行软盘格式化操作。通过设置寄存器的不同参数,可以指定要格式化的磁道、面、扇区大小和填充字节。在这个例子中,我们格式化了软盘70磁道0面的3个扇区,前两个扇区使用F6填充,第三个扇区使用48填充。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海纳老吴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值