Difference between revisions of "BGRABitmap tutorial 2/fr"

From Free Pascal wiki
Jump to navigationJump to search
m (Fixed syntax highlighting; deleted category already in page template)
 
(7 intermediate revisions by 3 users not shown)
Line 7: Line 7:
 
=== Création d'un nouveau projet ===
 
=== Création d'un nouveau projet ===
  
Créez un nouveau projet et ajouter la référence à [[BGRABitmap]], de la même façon que dans [[BGRABitmap tutorial/fr|le premier tutoriel]].
+
Créez un nouveau projet et ajoutez la référence à [[BGRABitmap]], de la même façon que dans [[BGRABitmap tutorial/fr|le premier tutoriel]].
  
 
=== Chargement de l'image ===
 
=== Chargement de l'image ===
  
Copiez une image dans le répertoire du projet. Supposons que son nom est ''image.png''.
+
Copiez une image dans le répertoire du projet. Supposons que son nom soit ''image.png''.
  
 
Ajoutez une variable privée à la fenêtre principale pour stocker l'image :
 
Ajoutez une variable privée à la fenêtre principale pour stocker l'image :
<delphi>  TForm1 = class(TForm)
+
<syntaxhighlight lang="pascal">  TForm1 = class(TForm)
 
   private
 
   private
 
     { private declarations }
 
     { private declarations }
Line 20: Line 20:
 
   public
 
   public
 
     { public declarations }
 
     { public declarations }
   end; </delphi>
+
   end; </syntaxhighlight>
  
Programmez le chargement de l'image quand la fenêtre est créée. Pour faire cela, double-cliquez sur la fenêtre. Une procédure devrait apparaitre dans l'éditeur de code. Ajoutez-y l'instruction de chargement :
+
Programmez le chargement de l'image quand la fenêtre est créée. Pour cela, double-cliquez sur la fenêtre. Une procédure devrait apparaître dans l'éditeur de code. Ajoutez-y l'instruction de chargement :
<delphi>procedure TForm1.FormCreate(Sender: TObject);
+
<syntaxhighlight lang="pascal">procedure TForm1.FormCreate(Sender: TObject);
 
begin
 
begin
 
   image := TBGRABitmap.Create('image.png');
 
   image := TBGRABitmap.Create('image.png');
end; </delphi>
+
end; </syntaxhighlight>
  
 
=== Dessiner l'image ===
 
=== Dessiner l'image ===
  
Ajouter un gestionnaire OnPaint. Pour cela, cliquez sur la fenêtre, allez dans l'inspecteur d'objet, dans l'onglet événement et double-cliquez sur la ligne OnPaint. Ensuite, ajoutez le code suivant :
+
Ajoutez un gestionnaire ''OnPaint''. Pour cela, cliquez sur la fenêtre, allez dans l'inspecteur d'objet, dans l'onglet événement et double-cliquez sur la ligne ''OnPaint''. Ensuite, ajoutez le code suivant :
<delphi>procedure TForm1.FormPaint(Sender: TObject);
+
<syntaxhighlight lang="pascal">procedure TForm1.FormPaint(Sender: TObject);
 
begin
 
begin
 
   image.Draw(Canvas,0,0,True);
 
   image.Draw(Canvas,0,0,True);
end;  </delphi>
+
end;  </syntaxhighlight>
  
Remarquez que le dernier paramètre est à vrai, ce qui signifie opaque. Si vous voulez prendre en compte les pixels transparents, encodés dans le canal alpha, vous devez mettre False à la place. Mais cela peut être lent de dessiner avec transparence sur un Canvas standard, alors si ce n'est pas nécessaire, utilisez le dessin opaque seulement.
+
Remarquez que le dernier paramètre est à ''True'', ce qui signifie opaque. Si vous voulez prendre en compte les pixels transparents, encodés dans le canal alpha, vous devez mettre ''False'' à la place. Mais cela peut être lent de dessiner avec transparence sur un ''Canvas'' standard, alors si la transparence n'est pas nécessaire, utilisez le dessin opaque seulement.
  
 
=== Code ===
 
=== Code ===
  
 
Finalement, vous devriez avoir quelque chose comme cela :
 
Finalement, vous devriez avoir quelque chose comme cela :
<delphi>unit UMain;
+
<syntaxhighlight lang="pascal">unit UMain;
  
 
{$mode objfpc}{$H+}
 
{$mode objfpc}{$H+}
Line 84: Line 84:
 
   {$I UMain.lrs}
 
   {$I UMain.lrs}
  
end.</delphi>
+
end.</syntaxhighlight>
  
 
=== Exécution du programme ===
 
=== Exécution du programme ===
Line 94: Line 94:
 
=== Centrer l'image ===
 
=== Centrer l'image ===
  
Vous pouvez centrer l'image sur la fenêtre. Pour cela, modifiez la procédure FormPaint :
+
Vous pouvez centrer l'image sur la fenêtre. Pour cela, modifiez la procédure ''FormPaint'' :
<delphi>procedure TForm1.FormPaint(Sender: TObject);
+
<syntaxhighlight lang="pascal">procedure TForm1.FormPaint(Sender: TObject);
 
var ImagePos: TPoint;
 
var ImagePos: TPoint;
 
begin
 
begin
Line 101: Line 101:
 
                     (ClientHeight - Image.Height) div 2 );
 
                     (ClientHeight - Image.Height) div 2 );
  
   // test si la position est négative
+
   // teste si la position est négative
 
   if ImagePos.X < 0 then ImagePos.X := 0;
 
   if ImagePos.X < 0 then ImagePos.X := 0;
 
   if ImagePos.Y < 0 then ImagePos.Y := 0;
 
   if ImagePos.Y < 0 then ImagePos.Y := 0;
  
 
   image.Draw(Canvas,ImagePos.X,ImagePos.Y,True);
 
   image.Draw(Canvas,ImagePos.X,ImagePos.Y,True);
end;</delphi>
+
end;</syntaxhighlight>
  
Pour calculer la position, nous avons besoin de déterminer l'espace entre l'image et le bord gauche (coordonnée X) et l'espace entre l'image et le bord haut (coordonnée Y). L'expression ClientWidth - Image.Width renvoie l'espace horizontal disponible, et on divise par 2 pour obtenir la marge gauche.
+
Pour calculer la position, vous avez besoin de déterminer l'espace entre l'image et le bord gauche (coordonnée X) et l'espace entre l'image et le bord haut (coordonnée Y). L'expression ''ClientWidth - Image.Width'' renvoie l'espace horizontal disponible, et on divise par 2 pour obtenir la marge gauche.
  
 
Le résultat peut être négatif si l'image est plus grande que la largeur cliente. Dans ce cas, la marge est mise à zéro.
 
Le résultat peut être négatif si l'image est plus grande que la largeur cliente. Dans ce cas, la marge est mise à zéro.
Line 116: Line 116:
 
=== Étirer une image ===
 
=== Étirer une image ===
  
Pour étirer une image, nous avons besoin de créer une image temporaire étirée :
+
Pour étirer une image, vous avez besoin de créer une image temporaire étirée :
<delphi>procedure TForm1.FormPaint(Sender: TObject);
+
<syntaxhighlight lang="pascal">procedure TForm1.FormPaint(Sender: TObject);
 
var stretched: TBGRABitmap;
 
var stretched: TBGRABitmap;
 
begin
 
begin
Line 123: Line 123:
 
   stretched.Draw(Canvas,0,0,True);
 
   stretched.Draw(Canvas,0,0,True);
 
   stretched.Free;
 
   stretched.Free;
end;</delphi>
+
end;</syntaxhighlight>
  
Par défaut, Resample utilise un joli rééchantillonnage, mais vous pouvez préciser si vous voulez un rééchantillonnage simple à la place (plus rapide) :
+
Par défaut, ''Resample'' utilise un joli ré-échantillonnage, mais vous pouvez préciser si vous voulez un ré-échantillonnage simple à la place (plus rapide) :
<delphi>stretched := image.Resample(ClientWidth, ClientHeight, rmSimpleStretch) as TBGRABitmap;</delphi>
+
<syntaxhighlight lang="pascal">stretched := image.Resample(ClientWidth, ClientHeight, rmSimpleStretch) as TBGRABitmap;</syntaxhighlight>
  
Vous pouvez choisir le filtre de rééchantillonage en utilisant la propriété ResampleFilter :
+
Vous pouvez choisir le filtre de ré-échantillonage en utilisant la propriété ''ResampleFilter'' :
<delphi>image.ResampleFilter := rfMitchell;
+
<syntaxhighlight lang="pascal">image.ResampleFilter := rfMitchell;
stretched := image.Resample(ClientWidth, ClientHeight) as TBGRABitmap;</delphi>
+
stretched := image.Resample(ClientWidth, ClientHeight) as TBGRABitmap;</syntaxhighlight>
  
[[BGRABitmap tutorial/fr|Premier tutoriel]] | [[BGRABitmap tutorial 3/fr|Tutoriel suivant (dessiner avec la souris)]]
+
[[BGRABitmap tutorial 1/fr|Premier tutoriel]] | [[BGRABitmap tutorial 3/fr|Tutoriel suivant (dessiner avec la souris)]]
 
 
[[Category:Graphics/fr]]
 

Latest revision as of 07:00, 10 February 2020

Deutsch (de) English (en) español (es) français (fr) русский (ru)


Accueil | Tutoriel 1 | Tutoriel 2 | Tutoriel 3 | Tutoriel 4 | Tutoriel 5 | Tutoriel 6 | Tutoriel 7 | Tutoriel 8 | Tutoriel 9 | Tutoriel 10 | Tutoriel 11 | Tutoriel 12 | Edit

Ce tutoriel montre comment charger une image et la dessiner sur la fenêtre.

Création d'un nouveau projet

Créez un nouveau projet et ajoutez la référence à BGRABitmap, de la même façon que dans le premier tutoriel.

Chargement de l'image

Copiez une image dans le répertoire du projet. Supposons que son nom soit image.png.

Ajoutez une variable privée à la fenêtre principale pour stocker l'image :

  TForm1 = class(TForm)
  private
    { private declarations }
    image: TBGRABitmap;
  public
    { public declarations }
  end;

Programmez le chargement de l'image quand la fenêtre est créée. Pour cela, double-cliquez sur la fenêtre. Une procédure devrait apparaître dans l'éditeur de code. Ajoutez-y l'instruction de chargement :

procedure TForm1.FormCreate(Sender: TObject);
begin
  image := TBGRABitmap.Create('image.png');
end;

Dessiner l'image

Ajoutez un gestionnaire OnPaint. Pour cela, cliquez sur la fenêtre, allez dans l'inspecteur d'objet, dans l'onglet événement et double-cliquez sur la ligne OnPaint. Ensuite, ajoutez le code suivant :

procedure TForm1.FormPaint(Sender: TObject);
begin
  image.Draw(Canvas,0,0,True);
end;

Remarquez que le dernier paramètre est à True, ce qui signifie opaque. Si vous voulez prendre en compte les pixels transparents, encodés dans le canal alpha, vous devez mettre False à la place. Mais cela peut être lent de dessiner avec transparence sur un Canvas standard, alors si la transparence n'est pas nécessaire, utilisez le dessin opaque seulement.

Code

Finalement, vous devriez avoir quelque chose comme cela :

unit UMain;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  BGRABitmap, BGRABitmapTypes;

type
  { TForm1 }

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
  private
    { private declarations }
    image: TBGRABitmap;
  public
    { public declarations }
  end; 

var
  Form1: TForm1; 

implementation

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  image := TBGRABitmap.Create('image.png');
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  image.Draw(Canvas,0,0,True);
end;

initialization
  {$I UMain.lrs}

end.

Exécution du programme

Vous devriez voir une fenêtre avec une image dessinée dedans au coin supérieur gauche.

BGRATutorial2.png

Centrer l'image

Vous pouvez centrer l'image sur la fenêtre. Pour cela, modifiez la procédure FormPaint :

procedure TForm1.FormPaint(Sender: TObject);
var ImagePos: TPoint;
begin
  ImagePos := Point( (ClientWidth - Image.Width) div 2,
                     (ClientHeight - Image.Height) div 2 );

  // teste si la position est négative
  if ImagePos.X < 0 then ImagePos.X := 0;
  if ImagePos.Y < 0 then ImagePos.Y := 0;

  image.Draw(Canvas,ImagePos.X,ImagePos.Y,True);
end;

Pour calculer la position, vous avez besoin de déterminer l'espace entre l'image et le bord gauche (coordonnée X) et l'espace entre l'image et le bord haut (coordonnée Y). L'expression ClientWidth - Image.Width renvoie l'espace horizontal disponible, et on divise par 2 pour obtenir la marge gauche.

Le résultat peut être négatif si l'image est plus grande que la largeur cliente. Dans ce cas, la marge est mise à zéro.

Vous pouvez lancer le programme et voir si cela marche. Notez ce qu'il se passe si vous enlevez le test pour la position négative.

Étirer une image

Pour étirer une image, vous avez besoin de créer une image temporaire étirée :

procedure TForm1.FormPaint(Sender: TObject);
var stretched: TBGRABitmap;
begin
  stretched := image.Resample(ClientWidth, ClientHeight) as TBGRABitmap;
  stretched.Draw(Canvas,0,0,True);
  stretched.Free;
end;

Par défaut, Resample utilise un joli ré-échantillonnage, mais vous pouvez préciser si vous voulez un ré-échantillonnage simple à la place (plus rapide) :

stretched := image.Resample(ClientWidth, ClientHeight, rmSimpleStretch) as TBGRABitmap;

Vous pouvez choisir le filtre de ré-échantillonage en utilisant la propriété ResampleFilter :

image.ResampleFilter := rfMitchell;
stretched := image.Resample(ClientWidth, ClientHeight) as TBGRABitmap;

Premier tutoriel | Tutoriel suivant (dessiner avec la souris)