ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 20134 15 févr. 2007 à 14:12
Salut,
Voici un exemple d'écriture de texte sur plusieurs lignes et centré dans le bitmap.
procedure InsertText(Bmp: TBitmap; Text: string; TextW: integer);
var
R: TRect;
BW, BH: integer;
begin
with Bmp.Canvas do
begin
Font.Color:= clred;
Font.Size:= 18;
Font.Style:= [fsBold];
Brush.Style:= bsClear; // pour écrire en transparent
end;
BW:= Bmp.Width;
BH:= Bmp.Height;
// initialisation du TRect
R.Left:= 0;
R.Top:= 0;
R.Right:= TextW; // largeur du texte souhaitée
R.Bottom:= BH;
// 1° appel à DrawText pour modifier R en fonction du texte
DrawText(Bmp.Canvas.Handle, PChar(Text), -1, R,
DT_CENTER or DT_WORDBREAK or DT_CALCRECT);
// réajustement de R pour le placer au centre de l'image
R.Left:= (BW - R.Right) div 2;
R.Right:= R.Right + R.Left;
R.Top:= (BH - R.Bottom) div 2;
R.Bottom:= R.Bottom + R.Top;
// 2° appel pour écrire
DrawText(Bmp.Canvas.Handle, PChar(Text), -1, R,
DT_CENTER or DT_WORDBREAK);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
InsertText(Image1.Picture.Bitmap, 'Voici un petit texte', 150);
Image1.Invalidate; // nécessaire dans ce cas
end;
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 20134 14 févr. 2007 à 10:29
Salut,
Pour l'écriture de texte, outre TextOut et TextRect, tu as la routine windows DrawText qui, bien qu'un peu plus lente, est nettement plus performante.
DrawText permet facilement de gérer l'alignement ou l'écriture sur plusieurs lignes.
Exemple : alignement centré et sur plusieurs lignes à l'intérieur d'un TRect que tu délimites préalablement :
DrawText(BmpDest.Canvas.Handle, Pchar(Text), -1, R, DT_CENTER or DT_WORDBREAK);
DrawText a aussi un truc très intéressant : si tu utilises le paramètre DT_CALCRECT :
DrawText(BmpDest.Canvas.Handle, PChar(Text), -1, R, DT_CALCRECT or DT_WORDBREAK);
la procedure n'écrira rien mais modifiera R (ton TRect) pour qu'il contienne tout le texte. Ce qui te permet, avant un deuxième appel à DrawText de remodifier la position R.Left et R.Top pour placer précisément le texte sur le canvas.
A +
Thierry
Vous n’avez pas trouvé la réponse que vous recherchez ?
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 20134 16 févr. 2007 à 11:27
N'as-tu pas oublié d'assigner un bitmap à la propriété Picture de Image1 ?Si tu ne l'as pas fait, ça ne peut pas marcher puisque la procedure écrit sur le Canvas du Bitmap (qui a Width 0 et Height 0 !!!).
Un conseil pour bien tester : chosis un fichier .bmp d'au moins 300/300 pixels.