Skia4Delphi - Fonctionnalités exclusives de RAD Studio

De RAD Studio
Attention: Il s'agit de fonctionnalités exclusives introuvables dans le projet open source.

Backend Vulkan

La bibliothèque Skia de RAD Studio offre la prise en charge du backend Vulkan pour Android et, facultativement, pour Windows. Lorsque le canevas Skia est utilisé avec RAD Studio, il utilise automatiquement Vulkan sur Android s'il est pris en charge, ce qui se traduit par des performances graphiques et une efficacité améliorées par rapport à OpenGLES. Pour activer Vulkan sur Windows lorsqu'il est pris en charge, définissez la valeur booléenne FMX.Skia.GlobalUseSkiaRasterWhenAvailable sur False dans la section d'initialisation. Voici un exemple :

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;
  ...
Remarque: La préférence pour le backend Vulkan sur Android peut être désactivée à l'aide de la même valeur booléenne GlobalUseVulkan employée pour l'activer sur Windows, mais elle doit être définie sur False pour la désactiver.

Effets et filtres avec le langage SKSL (Skia Shading Language)

Lorsque vous utilisez le rendu des applications Skia avec accélération par GPU au lieu du tramage, Firemonkey exploite le puissant langage SKSL pour restituer les effets et les filtres. Cette approche fournit des performances supérieures et améliore l'efficacité du canevas Skia.

En outre, la maintenance simplifiée représente l'un des principaux avantages liés à l'utilisation de SKSL pour créer des effets et des filtres. Une base de code de shader unique fonctionne de façon homogène sur toutes les plates-formes, éliminant la nécessité de plusieurs codes spécifiques à chaque API backend et garantissant des résultats uniformes.

Codec animé : encodeur WebP

La version de Skia intégrée à RAD Studio supporte l'encodage des images WebP animées. Avec la nouvelle base de codec animé de Firemonkey, il est possible de recenser de nouveaux encodeurs capables d'effectuer l'encodage et/ou le décodage.

WebP est l'un des formats les plus largement utilisés sur le Web grâce à sa capacité de compression supérieure au format JPEG, qui permet de réduire la taille des fichiers tout en maintenant une qualité supérieure. Il offre également des capacités d'animation similaires aux GIF, mais avec des trames sans perte pour supprimer la perte de qualité et/ou une certaine compression. En outre, il prend en charge la transparence, ce qui en fait un format hautement polyvalent.

A titre d'exemple, supposons que nous ayons cinq images PNG 400x400 nommées frame1.png, frame2.png, frame3.png, frame4.png et frame5.png, chacune avec un intervalle de 80 millisecondes. Pour créer une image WebP animée, commencez par inclure les unités "FMX.Graphics" et "FMX.Skia", puis utilisez le code suivant :

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;

Imprimante

Lorsque Skia est activée, l'imprimante native de Firemonkey pour Windows utilise Skia comme backend pour l'imprimante physique et assure le support de toutes les autres plates-formes via l'impression de documents PDF, avec l'impression XPS facultative également disponible lorsque la cible est Windows. Sur iOS et Android, l'imprimante génère un fichier imprimable, qui sera automatiquement partagé en fin de traitement.

Pour utiliser l'imprimante de Firemonkey, suivez l'exemple simple ci-dessous :

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;
Remarque: Pour les cibles Android, une permission spécifique doit être accordée dans la boîte de dialogue Options de projet. Cliquez avec le bouton droit sur votre projet, sélectionnez "Options...", naviguez jusqu'à "Application" > "Liste des droits", choisissez la cible Android (Toutes les configurations), puis cochez l'option "Partage de fichiers sécurisé".

Vous pouvez sélectionner un format de papier personnalisé ou une taille prédéfinie. Par défaut, le papier A4 est configuré, mais il peut être facilement changé, comme le montre l'exemple ci-dessous :

uses
  FMX.Printer;
 
initialization
  // Alter the document's paper size
  TPrinterDocument.SetDocumentPaper(TDocumentPaper.Letter);
end.

Selon les périphériques cible, la taille du document et la complexité, l'interface utilisateur peut cesser de répondre en raison d'une opération gourmande en ressources. Dans ce cas, vous pouvez utiliser l'impression du thread d'arrière-plan sur toutes les plates-formes pour imprimer directement vers un flux, comme dans l'exemple ci-dessous :

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;


Remarque: Pour savoir comment ouvrir la boîte de dialogue de configuration d'imprimante pour Windows et macOS dans des applications FireMonkey, consultez Impression depuis une application FireMonkey.

Support C++ Builder

RAD Studio offre le support Skia4Delphi pour C++ Builder, y compris la démo principale du projet écrite en C++ pour aider les utilisateurs dans son implémentation. Pour accéder à la démo pendant l'installation de RAD Studio, installez les exemples ou visitez le référentiel GitHub d'Embarcadero pour la télécharger.


Voir aussi