Sign in Join
Wiki copytemporary

BGRABitmap tutorial 2/fr: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: BGRABitmap tutorial 2/fr

OldNewLine
1+Ce tutoriel montre comment charger une image et la dessiner sur la fenêtre.
2+
3+### Création d'un nouveau projet
4+
5+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]].
6+
7+### Chargement de l'image
8+
9+Copiez une image dans le répertoire du projet. Supposons que son nom soit *image.png*.
10+
11+Ajoutez une variable privée à la fenêtre principale pour stocker l'image :
12+
13+``` pascal
14+ TForm1 = class(TForm)
15+ private
16+ { private declarations }
17+ image: TBGRABitmap;
18+ public
19+ { public declarations }
20+ end;
21+```
22+
23+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 :
24+
25+``` pascal
26+procedure TForm1.FormCreate(Sender: TObject);
27+begin
28+ image := TBGRABitmap.Create('image.png');
29+end;
30+```
31+
32+### Dessiner l'image
33+
34+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 :
35+
36+``` pascal
37+procedure TForm1.FormPaint(Sender: TObject);
38+begin
39+ image.Draw(Canvas,0,0,True);
40+end;
41+```
42+
43+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.
44+
45+### Code
46+
47+Finalement, vous devriez avoir quelque chose comme cela :
48+
49+``` pascal
50+unit UMain;
51+
52+{$mode objfpc}{$H+}
53+
54+interface
55+
56+uses
57+ Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
58+ BGRABitmap, BGRABitmapTypes;
59+
60+type
61+ { TForm1 }
62+
63+ TForm1 = class(TForm)
64+ procedure FormCreate(Sender: TObject);
65+ procedure FormPaint(Sender: TObject);
66+ private
67+ { private declarations }
68+ image: TBGRABitmap;
69+ public
70+ { public declarations }
71+ end;
72+
73+var
74+ Form1: TForm1;
75+
76+implementation
77+
78+{ TForm1 }
79+
80+procedure TForm1.FormCreate(Sender: TObject);
81+begin
82+ image := TBGRABitmap.Create('image.png');
83+end;
84+
85+procedure TForm1.FormPaint(Sender: TObject);
86+begin
87+ image.Draw(Canvas,0,0,True);
88+end;
89+
90+initialization
91+ {$I UMain.lrs}
92+
93+end.
94+```
95+
96+### Exécution du programme
97+
98+Vous devriez voir une fenêtre avec une image dessinée dedans au coin supérieur gauche.
99+
100+<figure>
101+<img src="BGRATutorial2.png" title="BGRATutorial2.png" />
102+<figcaption>BGRATutorial2.png</figcaption>
103+</figure>
104+
105+### Centrer l'image
106+
107+Vous pouvez centrer l'image sur la fenêtre. Pour cela, modifiez la procédure *FormPaint* :
108+
109+``` pascal
110+procedure TForm1.FormPaint(Sender: TObject);
111+var ImagePos: TPoint;
112+begin
113+ ImagePos := Point( (ClientWidth - Image.Width) div 2,
114+ (ClientHeight - Image.Height) div 2 );
115+
116+ // teste si la position est négative
117+ if ImagePos.X < 0 then ImagePos.X := 0;
118+ if ImagePos.Y < 0 then ImagePos.Y := 0;
119+
120+ image.Draw(Canvas,ImagePos.X,ImagePos.Y,True);
121+end;
122+```
123+
124+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.
125+
126+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.
127+
128+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.
129+
130+### Étirer une image
131+
132+Pour étirer une image, vous avez besoin de créer une image temporaire étirée :
133+
134+``` pascal
135+procedure TForm1.FormPaint(Sender: TObject);
136+var stretched: TBGRABitmap;
137+begin
138+ stretched := image.Resample(ClientWidth, ClientHeight) as TBGRABitmap;
139+ stretched.Draw(Canvas,0,0,True);
140+ stretched.Free;
141+end;
142+```
143+
144+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) :
145+
146+``` pascal
147+stretched := image.Resample(ClientWidth, ClientHeight, rmSimpleStretch) as TBGRABitmap;
148+```
149+
150+Vous pouvez choisir le filtre de ré-échantillonage en utilisant la propriété *ResampleFilter* :
151+
152+``` pascal
153+image.ResampleFilter := rfMitchell;
154+stretched := image.Resample(ClientWidth, ClientHeight) as TBGRABitmap;
155+```
156+
157+[[BGRABitmap tutorial 1/fr|Premier tutoriel]] \| [[BGRABitmap tutorial 3/fr|Tutoriel suivant (dessiner avec la souris)]]
158+
159+---
160+*From the Free Pascal wiki, page "BGRABitmap tutorial 2/fr", as it stood on 2020-02-10 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history