Sign in Join
Wiki copytemporary

BGRABitmap tutorial Font rendering/fr: what changed

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

Title: BGRABitmap tutorial Font rendering/fr

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]].
2+
3+Voyons les façons avancées de dessiner du texte.
4+
5+### La propriété FontRenderer
6+
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*).
8+
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.
10+
11+#### Ajouter des effets
12+
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
16+Uses BGRABitmap, BGRATextFX;
17+
18+var Bitmap: TBGRABitmap;
19+ Renderer: TBGRATextEffectFontRenderer;
20+
21+begin
22+ ...
23+ Renderer := TBGRATextEffectFontRenderer.Create;
24+ Bitmap.FontRenderer := Renderer;
25+```
26+
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.
31+
32+Par exemple, définissez l'événement *OnPaint* en double-cliquant dans l'inspecteur d'objet d'une fenêtre et écrivez :
33+
34+``` pascal
35+Uses 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;
54+```
55+
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+
63+``` pascal
64+ bmp.FontQuality:= fqFineAntialiasing;
65+```
66+
67+<figure>
68+<img src="bgratexteffectfontrendering_aa.png" title="bgratexteffectfontrendering_aa.png" />
69+<figcaption>bgratexteffectfontrendering_aa.png</figcaption>
70+</figure>
71+
72+##### Utiliser un éclairage de Phong
73+
74+Pour avoir un éclairage de Phong, vous aurez besoin d'un *shader*. Pour le créer :
75+
76+``` pascal
77+uses 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
84+```
85+
86+L'exemple au complet, en utilisant un ombrage, devient :
87+
88+``` pascal
89+uses 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);
104+```
105+
106+<figure>
107+<img src="bgratexteffectfontrendering_shader.png" title="bgratexteffectfontrendering_shader.png" />
108+<figcaption>bgratexteffectfontrendering_shader.png</figcaption>
109+</figure>
110+
111+#### Utiliser les polices avec LazFreeType intégré à Lazarus
112+
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 :
116+
117+``` pascal
118+uses 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;
134+```
135+
136+À présent, pour utiliser ces polices, définissez la propriété *FontRenderer* :
137+
138+``` pascal
139+uses 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;
156+```
157+
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* :
164+
165+``` pascal
166+ renderer.ShadowVisible := True;
167+```
168+
169+<figure>
170+<img src="bgrafreetyperenderer_shadow.png" title="bgrafreetyperenderer_shadow.png" />
171+<figcaption>bgrafreetyperenderer_shadow.png</figcaption>
172+</figure>
173+
174+Pour ajouter un contour :
175+
176+``` pascal
177+ renderer.OutlineVisible := True;
178+ renderer.OutlineColor := CSSBlack;
179+ renderer.OuterOutlineOnly := True;
180+```
181+
182+<figure>
183+<img src="bgrafreetyperenderer_outline.png" title="bgrafreetyperenderer_outline.png" />
184+<figcaption>bgrafreetyperenderer_outline.png</figcaption>
185+</figure>
186+
187+##### Éclairage de Phong
188+
189+Pour avoir un éclairage de Phong, vous aurez besoin d'un *shader*. Pour le créer :
190+
191+``` pascal
192+uses 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
199+```
200+
201+<figure>
202+<img src="bgrafreetyperenderer_shader.png" title="bgrafreetyperenderer_shader.png" />
203+<figcaption>bgrafreetyperenderer_shader.png</figcaption>
204+</figure>
205+
206+---
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

Back to history