Sign in Join
Wiki copytemporary

BGRABitmap tutorial Font rendering/fr: what changed

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

OldNewLine
1-Des fonctions de texte de base sont disponibles avec les objets *TBGRABitmap*. Vous trouverez des explications à ce sujet dans le [[BGRABitmap tutorial 12/fr|tutoriel 12]].
1+Des fonctions de texte de base sont disponibles avec les objets _TBGRABitmap_. Vous trouverez des explications à ce sujet dans le [[BGRABitmap tutorial 12/fr|tutoriel 12]].
22
3-Voyons les façons avancées de dessiner du texte.
3+Voyons les façons avancées de dessiner du texte.
44
5+## Contents
6+
7+ * 1 La propriété FontRenderer
8+ * 1.1 Ajouter des effets
9+ * 1.1.1 Utiliser un éclairage de Phong
10+ * 1.2 Utiliser les polices avec LazFreeType intégré à Lazarus
11+ * 1.2.1 Éclairage de Phong
12+
513### La propriété FontRenderer
614
7-Les images *TBGRABitmap* ont une propriété *FontRenderer*. Par défaut, le moteur de rendu utilisant le dessin de la LCL est utilisé, éventuellement en dessinant le texte plus gros et en appliquant un anticrénelage. Cela est réalisé par la classe *TLCLFontRenderer* de l'unité *BGRAText*. Cependant, ce mode de dessin ne permet pas de faire des ombrage ou de dessiner un contour au texte. De plus, il est un peu lent pour dessiner du texte dans un rectangle (fonction *TextRect*).
15+Les images _TBGRABitmap_ ont une propriété _FontRenderer_. Par défaut, le moteur de rendu utilisant le dessin de la LCL est utilisé, éventuellement en dessinant le texte plus gros et en appliquant un anticrénelage. Cela est réalisé par la classe _TLCLFontRenderer_ de l'unité _BGRAText_. Cependant, ce mode de dessin ne permet pas de faire des ombrage ou de dessiner un contour au texte. De plus, il est un peu lent pour dessiner du texte dans un rectangle (fonction _TextRect_).
816
9-Vous pouvez remplacer le moteur de rendu en créant un objet dérivé de la classe *TBGRACustomFontRenderer* et en l'affectant à la propriété *FontRenderer*. Notez qu'une instance ne peut être utilisée que pour un seul objet, qui en devient le propriétaire. Vous n'avez alors pas à libérer vous-même le moteur de rendu.
17+Vous pouvez remplacer le moteur de rendu en créant un objet dérivé de la classe _TBGRACustomFontRenderer_ et en l'affectant à la propriété _FontRenderer_. Notez qu'une instance ne peut être utilisée que pour un seul objet, qui en devient le propriétaire. Vous n'avez alors pas à libérer vous-même le moteur de rendu.
1018
1119#### Ajouter des effets
1220
13-Pour améliorer la vitesse du rendu et ajouter des effets, vous aurez besoin de la classe *TBGRATextEffectFontRenderer* qui se trouve dans l'unité *BGRATextFX*. Pour cela, écrivez simplement ceci :
14-
15-``` pascal
21+Pour améliorer la vitesse du rendu et ajouter des effets, vous aurez besoin de la classe _TBGRATextEffectFontRenderer_ qui se trouve dans l'unité _BGRATextFX_. Pour cela, écrivez simplement ceci :
22+```
1623Uses BGRABitmap, BGRATextFX;
17-
18-var Bitmap: TBGRABitmap;
19- Renderer: TBGRATextEffectFontRenderer;
20-
21-begin
22- ...
23- Renderer := TBGRATextEffectFontRenderer.Create;
24- Bitmap.FontRenderer := Renderer;
24+
25+ var Bitmap: TBGRABitmap;
26+ Renderer: TBGRATextEffectFontRenderer;
27+
28+ begin
29+ ...
30+ Renderer := TBGRATextEffectFontRenderer.Create;
31+ Bitmap.FontRenderer := Renderer;
2532```
2633
27-Notez que vous pourriez affecter directement l'objet créé sans passer par la variable *Renderer*, mais cette dernière va vous permettre de choisir les effets appliqués.
28-
29-- Pour l'ombrage, utilisez les propriétés *ShadowVisible*, *ShadowColor*, *ShadowOffset* et *ShadowRadius*. Pour qu'une ombre soit visible, il faut que *ShadowVisible* soit à *True* et que *ShadowColor* ne soit pas transparent.
30-- Pour ajouter un contour, utilisez *OutlineVisible*, *OuterOutlineOnly*, *OutlineColor* ou *OutlineTexture* et *OutlineWidth*. Pour qu'un contour soit visible, il faut que *OutlineVisible* soit à *True*, et qu'une texture soit définie ou sinon une couleur non transparente. De plus, *OutlineWidth* ne doit pas être égal à zéro.
34+Notez que vous pourriez affecter directement l'objet créé sans passer par la variable _Renderer_ , mais cette dernière va vous permettre de choisir les effets appliqués.
3135
32-Par exemple, définissez l'événement *OnPaint* en double-cliquant dans l'inspecteur d'objet d'une fenêtre et écrivez :
36+ * Pour l'ombrage, utilisez les propriétés _ShadowVisible_ , _ShadowColor_ , _ShadowOffset_ et _ShadowRadius_. Pour qu'une ombre soit visible, il faut que _ShadowVisible_ soit à _True_ et que _ShadowColor_ ne soit pas transparent.
37+ * Pour ajouter un contour, utilisez _OutlineVisible_ , _OuterOutlineOnly_ , _OutlineColor_ ou _OutlineTexture_ et _OutlineWidth_. Pour qu'un contour soit visible, il faut que _OutlineVisible_ soit à _True_ , et qu'une texture soit définie ou sinon une couleur non transparente. De plus, _OutlineWidth_ ne doit pas être égal à zéro.
3338
34-``` pascal
39+Par exemple, définissez l'événement _OnPaint_ en double-cliquant dans l'inspecteur d'objet d'une fenêtre et écrivez :
40+```
3541Uses BGRABitmap, BGRABitmapTypes, BGRATextFX;
36-
37-procedure TForm1.FormPaint(Sender: TObject);
38-var
39- bmp: TBGRABitmap;
40- renderer: TBGRATextEffectFontRenderer;
41-begin
42- bmp := TBGRABitmap.Create(ClientWidth,ClientHeight,ColorToRGB(clBtnFace));
43- renderer := TBGRATextEffectFontRenderer.Create;
44- bmp.FontRenderer := renderer;
45- renderer.ShadowVisible := True;
46- renderer.OutlineVisible := True;
47- renderer.OutlineColor := BGRABlack;
48- renderer.OuterOutlineOnly := True;
49- bmp.FontFullHeight := 50;
50- bmp.TextOut(5,5,'Hello world',CSSRed);
51- bmp.Draw(Canvas,0,0);
52- bmp.Free;
53-end;
42+
43+ procedure TForm1.FormPaint(Sender: TObject);
44+ var
45+ bmp: TBGRABitmap;
46+ renderer: TBGRATextEffectFontRenderer;
47+ begin
48+ bmp := TBGRABitmap.Create(ClientWidth,ClientHeight,ColorToRGB(clBtnFace));
49+ renderer := TBGRATextEffectFontRenderer.Create;
50+ bmp.FontRenderer := renderer;
51+ renderer.ShadowVisible := True;
52+ renderer.OutlineVisible := True;
53+ renderer.OutlineColor := BGRABlack;
54+ renderer.OuterOutlineOnly := True;
55+ bmp.FontFullHeight := 50;
56+ bmp.TextOut(5,5,'Hello world',CSSRed);
57+ bmp.Draw(Canvas,0,0);
58+ bmp.Free;
59+ end;
5460```
5561
56-<figure>
57-<img src="bgratexteffectfontrendering.png" title="bgratexteffectfontrendering.png" />
58-<figcaption>bgratexteffectfontrendering.png</figcaption>
59-</figure>
60-
61-Notez que l'anticrénelage n'est pas activé. Vous pouvez le faire avec :
62+[![bgratexteffectfontrendering.png](/wiki-images/f/fa/bgratexteffectfontrendering.png)](</File:bgratexteffectfontrendering.png>)
6263
63-``` pascal
64- bmp.FontQuality:= fqFineAntialiasing;
64+Notez que l'anticrénelage n'est pas activé. Vous pouvez le faire avec :
6565```
66+bmp.FontQuality:= fqFineAntialiasing;
67+```
6668
67-<figure>
68-<img src="bgratexteffectfontrendering_aa.png" title="bgratexteffectfontrendering_aa.png" />
69-<figcaption>bgratexteffectfontrendering_aa.png</figcaption>
70-</figure>
69+[![bgratexteffectfontrendering aa.png](/wiki-images/3/3d/bgratexteffectfontrendering_aa.png)](</File:bgratexteffectfontrendering_aa.png>)
7170
7271##### Utiliser un éclairage de Phong
7372
74-Pour avoir un éclairage de Phong, vous aurez besoin d'un *shader*. Pour le créer :
75-
76-``` pascal
73+Pour avoir un éclairage de Phong, vous aurez besoin d'un _shader_. Pour le créer :
74+```
7775uses BGRAGradients;
78-var
79- shader: TPhongShading;
80- renderer: TBGRATextEffectFontRenderer;
81-begin
82- shader := TPhongShading.Create;
83- renderer := TBGRATextEffectFontRenderer.Create(shader, True); //le deuxième paramètre indique que le shader appartient au moteur de rendu
76+ var
77+ shader: TPhongShading;
78+ renderer: TBGRATextEffectFontRenderer;
79+ begin
80+ shader := TPhongShading.Create;
81+ renderer := TBGRATextEffectFontRenderer.Create(shader, True); //le deuxième paramètre indique que le shader appartient au moteur de rendu
8482```
8583
86-L'exemple au complet, en utilisant un ombrage, devient :
87-
88-``` pascal
84+L'exemple au complet, en utilisant un ombrage, devient :
85+```
8986uses BGRABitmap, BGRABitmapTypes, BGRATextFX, BGRAGradients;
90-
91-procedure TForm1.FormPaint(Sender: TObject);
92-var bmp: TBGRABitmap;
93- shader: TPhongShading;
94- renderer: TBGRATextEffectFontRenderer;
95-begin
96- bmp := TBGRABitmap.Create(ClientWidth,ClientHeight,ColorToRGB(clBtnFace));
97- shader := TPhongShading.Create;
98- renderer := TBGRATextEffectFontRenderer.Create(shader,True);
99- bmp.FontRenderer := renderer;
100- renderer.ShadowVisible := True;
101- bmp.FontFullHeight := 50;
102- bmp.FontQuality:= fqFineAntialiasing;
103- bmp.TextOut(5,5,'Hello world',CSSRed);
87+
88+ procedure TForm1.FormPaint(Sender: TObject);
89+ var bmp: TBGRABitmap;
90+ shader: TPhongShading;
91+ renderer: TBGRATextEffectFontRenderer;
92+ begin
93+ bmp := TBGRABitmap.Create(ClientWidth,ClientHeight,ColorToRGB(clBtnFace));
94+ shader := TPhongShading.Create;
95+ renderer := TBGRATextEffectFontRenderer.Create(shader,True);
96+ bmp.FontRenderer := renderer;
97+ renderer.ShadowVisible := True;
98+ bmp.FontFullHeight := 50;
99+ bmp.FontQuality:= fqFineAntialiasing;
100+ bmp.TextOut(5,5,'Hello world',CSSRed);
104101```
105102
106-<figure>
107-<img src="bgratexteffectfontrendering_shader.png" title="bgratexteffectfontrendering_shader.png" />
108-<figcaption>bgratexteffectfontrendering_shader.png</figcaption>
109-</figure>
103+[![bgratexteffectfontrendering shader.png](/wiki-images/2/2c/bgratexteffectfontrendering_shader.png)](</File:bgratexteffectfontrendering_shader.png>)
110104
111105#### Utiliser les polices avec LazFreeType intégré à Lazarus
112106
113-Depuis la version 1.0 de Lazarus, un moteur de police FreeType est intégré à Lazarus. Notez que vous devez fournir vous-même les fichiers ou les flux contenant les polices que vous voulez afficher. Les répertoires du système et les polices installées sont ignorés, à moins bien entendu que vous ajoutiez explicitement ces fichiers. Notez que dans l'implémentation actuelle, il est nécessaire de fournir la police Arial même si vous ne l'utilisez pas.
114-
115-Afin de définir les polices, écrivez ceci lors de la création de votre application :
107+Depuis la version 1.0 de Lazarus, un moteur de police FreeType est intégré à Lazarus. Notez que vous devez fournir vous-même les fichiers ou les flux contenant les polices que vous voulez afficher. Les répertoires du système et les polices installées sont ignorés, à moins bien entendu que vous ajoutiez explicitement ces fichiers. Notez que dans l'implémentation actuelle, il est nécessaire de fournir la police Arial même si vous ne l'utilisez pas.
116108
117-``` pascal
109+Afin de définir les polices, écrivez ceci lors de la création de votre application :
110+```
118111uses LazFreeTypeFontCollection;
119-
120-var FFontCollection: TFreeTypeFontCollection;
121-
122-procedure TForm1.FormCreate(Sender: TObject);
123-begin
124- FFontCollection := TFreeTypeFontCollection.Create;
125- FFontCollection.AddFile('Arial.ttf'); //en supposant que le fichier se trouve à coté de l'application
126- SetDefaultFreeTypeFontCollection(FFontCollection);
127-end;
128-
129-procedure TForm1.FormDestroy(Sender: TObject);
130-begin
131- SetDefaultFreeTypeFontCollection(nil);
132- FreeAndNil(FFontCollection);
133-end;
112+
113+ var FFontCollection: TFreeTypeFontCollection;
114+
115+ procedure TForm1.FormCreate(Sender: TObject);
116+ begin
117+ FFontCollection := TFreeTypeFontCollection.Create;
118+ FFontCollection.AddFile('Arial.ttf'); //en supposant que le fichier se trouve à coté de l'application
119+ SetDefaultFreeTypeFontCollection(FFontCollection);
120+ end;
121+
122+ procedure TForm1.FormDestroy(Sender: TObject);
123+ begin
124+ SetDefaultFreeTypeFontCollection(nil);
125+ FreeAndNil(FFontCollection);
126+ end;
134127```
135128
136-À présent, pour utiliser ces polices, définissez la propriété *FontRenderer* :
137-
138-``` pascal
129+À présent, pour utiliser ces polices, définissez la propriété _FontRenderer_ :
130+```
139131uses BGRABitmap, BGRABitmapTypes, BGRAFreeType;
140-
141-procedure TForm1.FormPaint(Sender: TObject);
142-var
143- bmp: TBGRABitmap;
144- renderer: TBGRAFreeTypeFontRenderer;
145-begin
146- bmp := TBGRABitmap.Create(ClientWidth,ClientHeight,ColorToRGB(clBtnFace));
147- renderer := TBGRAFreeTypeFontRenderer.Create;
148- bmp.FontRenderer := renderer;
149- bmp.FontName := 'Arial';
150- bmp.FontFullHeight:= 50;
151- bmp.FontQuality := fqFineClearTypeRGB;
152- bmp.TextOut(10,10,'Hello world',BGRABlack);
153- bmp.Draw(Canvas,0,0);
154- bmp.Free;
155-end;
132+
133+ procedure TForm1.FormPaint(Sender: TObject);
134+ var
135+ bmp: TBGRABitmap;
136+ renderer: TBGRAFreeTypeFontRenderer;
137+ begin
138+ bmp := TBGRABitmap.Create(ClientWidth,ClientHeight,ColorToRGB(clBtnFace));
139+ renderer := TBGRAFreeTypeFontRenderer.Create;
140+ bmp.FontRenderer := renderer;
141+ bmp.FontName := 'Arial';
142+ bmp.FontFullHeight:= 50;
143+ bmp.FontQuality := fqFineClearTypeRGB;
144+ bmp.TextOut(10,10,'Hello world',BGRABlack);
145+ bmp.Draw(Canvas,0,0);
146+ bmp.Free;
147+ end;
156148```
157149
158-<figure>
159-<img src="bgrafreetyperenderer.png" title="bgrafreetyperenderer.png" />
160-<figcaption>bgrafreetyperenderer.png</figcaption>
161-</figure>
162-
163-Vous pouvez ajouter une ombre avec la propriété *Shadow* :
150+[![bgrafreetyperenderer.png](/wiki-images/5/54/bgrafreetyperenderer.png)](</File:bgrafreetyperenderer.png>)
164151
165-``` pascal
166- renderer.ShadowVisible := True;
152+Vous pouvez ajouter une ombre avec la propriété _Shadow_ :
167153```
168-
169-<figure>
170-<img src="bgrafreetyperenderer_shadow.png" title="bgrafreetyperenderer_shadow.png" />
171-<figcaption>bgrafreetyperenderer_shadow.png</figcaption>
172-</figure>
154+renderer.ShadowVisible := True;
155+```
173156
174-Pour ajouter un contour :
157+[![bgrafreetyperenderer shadow.png](/wiki-images/7/70/bgrafreetyperenderer_shadow.png)](</File:bgrafreetyperenderer_shadow.png>)
175158
176-``` pascal
177- renderer.OutlineVisible := True;
178- renderer.OutlineColor := CSSBlack;
179- renderer.OuterOutlineOnly := True;
159+Pour ajouter un contour :
180160```
161+renderer.OutlineVisible := True;
162+ renderer.OutlineColor := CSSBlack;
163+ renderer.OuterOutlineOnly := True;
164+```
181165
182-<figure>
183-<img src="bgrafreetyperenderer_outline.png" title="bgrafreetyperenderer_outline.png" />
184-<figcaption>bgrafreetyperenderer_outline.png</figcaption>
185-</figure>
166+[![bgrafreetyperenderer outline.png](/wiki-images/4/44/bgrafreetyperenderer_outline.png)](</File:bgrafreetyperenderer_outline.png>)
186167
187168##### Éclairage de Phong
188169
189-Pour avoir un éclairage de Phong, vous aurez besoin d'un *shader*. Pour le créer :
190-
191-``` pascal
170+Pour avoir un éclairage de Phong, vous aurez besoin d'un _shader_. Pour le créer :
171+```
192172uses BGRAGradients;
193-var
194- shader: TPhongShading;
195- renderer: TBGRAFreeTypeFontRenderer;
196-begin
197- shader := TPhongShading.Create;
198- renderer := TBGRAFreeTypeFontRenderer.Create(shader, True); //le deuxième paramètre indique que le shader appartient au moteur de rendu
173+ var
174+ shader: TPhongShading;
175+ renderer: TBGRAFreeTypeFontRenderer;
176+ begin
177+ shader := TPhongShading.Create;
178+ renderer := TBGRAFreeTypeFontRenderer.Create(shader, True); //le deuxième paramètre indique que le shader appartient au moteur de rendu
199179```
200180
201-<figure>
202-<img src="bgrafreetyperenderer_shader.png" title="bgrafreetyperenderer_shader.png" />
203-<figcaption>bgrafreetyperenderer_shader.png</figcaption>
204-</figure>
181+[![bgrafreetyperenderer shader.png](/wiki-images/9/91/bgrafreetyperenderer_shader.png)](</File:bgrafreetyperenderer_shader.png>)
205182
206183---
207-*From the Free Pascal wiki, page "BGRABitmap tutorial Font rendering/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).*
208-Category: Français
184+*From the Free Pascal wiki, page "BGRABitmap tutorial Font rendering/fr", as the Internet Archive kept it on 2023-03-30. 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