Skia4Delphi - Exklusive Features für RAD Studio

Aus RAD Studio
Wechseln zu: Navigation, Suche
Achtung: Dies sind exklusive Features, die in dem Open-Source-Projekt nicht vorhanden sind.

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;
  ...
Hinweis: Die Präferenz für das Vulkan-Backend unter Android kann mit demselben booleschen GlobalUseVulkan deaktiviert werden, der auch für die Aktivierung unter Windows verwendet wird, sollte aber zum Deaktivieren auf False festgelegt werden.

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;
Hinweis: Für Android-Ziele muss eine bestimmte Berechtigung in den Projektoptionen erteilt werden. Klicken Sie mit der rechten Maustaste auf Ihr Projekt, wählen Sie Optionen... aus, navigieren Sie zu Anwendung > Berechtigungsliste, wählen Sie das Android-Ziel (Alle Konfigurationen) aus und aktivieren Sie die Option Sichere Dateifreigabe.

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.


Siehe auch