Skia4Delphi - Exklusive Features für RAD Studio
Inhaltsverzeichnis
Vulkan-Backend
Skia mit RAD Studio unterstützt das Vulkan-Backend für Android und optional für Windows. Das Skia-Canvas mit RAD Studio nutzt automatisch Vulkan auf Android (falls unterstützt). Dies führt zu einer verbesserten grafischen Leistung und Energieeffizienz im Vergleich zu OpenGLES. Um Vulkan unter Windows zu aktivieren (falls unterstützt), legen Sie im initialization-Abschnitt FMX.Types.GlobalUseVulkan auf True und FMX.Skia.GlobalUseSkiaRasterWhenAvailable auf False fest. Hier ist ein Beispiel:
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;
...
Effekte und Filter mit Skia Shading Language (SKSL)
Wenn Sie das Skia-App-Rendern mit GPU-Beschleunigung anstelle der Rasterung verwenden, nutzt FireMonkey die leistungsstarke SKSL zum Rendern von Effekten und Filtern. Dieser Ansatz bietet nicht nur eine bessere Leistung als die derzeitige Methode, sondern erhöht auch die Effizienz des Skia-Canvas.
Darüber hinaus ist einer der Hauptvorteile von SKSL zum Erstellen von Effekten und Filtern die vereinfachte Wartung. Eine einzige Shader-Codebasis funktioniert konsistent auf allen Plattformen. Daher benötigen Sie nicht mehrere spezifische Codes für die einzelnen Backend-APIs und einheitliche Ergebnisse sind sichergestellt.
Animiertes Codec: WebP-Encoder
Die in RAD Studio integrierte Skia-Version unterstützt die Codierung von animiertem WebP. Mit der neuen animierten Codec-Basis von FireMonkey können neue Encoder registriert werden, die in der Lage sind, zu codieren und/oder zu decodieren.
WebP ist eines der am weitesten verbreiteten Formate im Internet, da es im Vergleich zu JPEG besser komprimiert werden kann. Dies führt zu kleineren Dateien bei gleichzeitig höherer Qualität. Es bietet auch Animationsmöglichkeiten ähnlich wie GIFs, jedoch mit verlustfreien Frames, d. h. ohne Verlust von Qualität und/oder Komprimierung. Außerdem unterstützt es Transparenz, was es zu einem äußerst vielseitigen Format macht.
Angenommen, Sie haben fünf 400x400-PNG-Bilder (Frames) mit den Namen frame1.png, frame2.png, frame3.png, frame4.png und frame5.png und jeder Frame hat ein Intervall von 80 Millisekunden. Um ein animiertes WebP zu erstellen, beziehen Sie zuerst die Units "FMX.Graphics" und "FMX.Skia" ein und verwenden dann den folgenden Code:
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;
Drucker
Wenn Skia aktiviert ist, verwendet der native FireMonkey-Drucker für Windows Skia als Backend für den physischen Drucker und stellt die Unterstützung für alle anderen Plattformen für das Drucken von PDF-Dokumenten sicher. Dabei können auch optional XPS-Dateien für Windows als Ziel gedruckt werden. Unter iOS und Android generiert der Drucker eine druckbare Datei, die bei Fertigstellung automatisch freigegeben wird.
Das folgende Beispiel zeigt, wie der FireMonkey-Drucker verwendet wird:
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;
Sie können benutzerdefinierte Papiergrößen oder vordefinierte Größen verwenden. Standardmäßig ist A4-Papier konfiguriert, was Sie aber einfach ändern können, wie im folgenden Beispiel gezeigt:
uses
FMX.Printer;
initialization
// Alter the document's paper size
TPrinterDocument.SetDocumentPaper(TDocumentPaper.Letter);
end.
Je nach Zielgeräten, Dokumentgröße und Komplexität könnte die UI aufgrund des ressourcenintensiven Vorgangs nicht mehr reagieren. In solchen Fällen können Sie das Drucken im Hintergrund-auf allen Plattformen verwenden, um direkt in einen Stream zu drucken, wie im folgenden Beispiel gezeigt:
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-Unterstützung
RAD Studio bietet Skia4Delphi-Unterstützung für C++Builder, einschließlich für die in C++ geschriebene Hauptdemo des Projekts, um Benutzer bei der Implementierung zu unterstützen. Um während der Installation von RAD Studio auf die Demo zuzugreifen, installieren Sie die Beispiele oder laden Sie das Repository vom Embarcadero GitHub herunter.