Drawtext and co.... [Résolu]

slhuilli 193 Messages postés lundi 7 janvier 2002Date d'inscription 7 juillet 2017 Dernière intervention - 13 févr. 2007 à 22:09 - Dernière réponse : ThWilliam 424 Messages postés mardi 3 janvier 2006Date d'inscription 26 novembre 2013 Dernière intervention
- 16 févr. 2007 à 11:27
Bonjour,

je cherche a faire deux choses précises sosu delphi 6 :

1. sur une image JPG ou BMP, superpositionner une autre image plus petite
2. sur une image JPG ou BMP, superpositionner un text

je l'ai deja fait mais je ne retrouve plus comment. C'est faisable mais comment.....

Merci de votre aide
Afficher la suite 

6 réponses

Répondre au sujet
ThWilliam 424 Messages postés mardi 3 janvier 2006Date d'inscription 26 novembre 2013 Dernière intervention - 15 févr. 2007 à 14:12
+3
Utile
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;

A +
Thierry
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ThWilliam
slhuilli 193 Messages postés lundi 7 janvier 2002Date d'inscription 7 juillet 2017 Dernière intervention - 15 févr. 2007 à 21:45
+3
Utile
je suppose que ca marche .... mais pas chez moi, mon image n'a rien d'écrit
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de slhuilli
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 14 févr. 2007 à 01:37
0
Utile
on peu faire par exemple (en travaillant qu'en bitmap) :

procedure SupperposeBitmap(BmpDest, BmpArrierePlan, BmpAvantPlan : TBitmap; const OffsetX, OffsetY : integer);
begin
   if BmpDest.HBITMAP <> BmpArrierePlan.HBITMAP then
      BmpDest.Assign(BmpArrierePlan);
   BmpDest.Canvas.Draw(OffsetX, OffsetY, BmpAvantPlan);
end;

procedure IncrustText(BmpDest, BmpSrc : TBitmap; const Text : string; const OffsetX,OffsetY : integer);
begin
   if BmpDest.HBITMAP <> BmpSrc.HBITMAP then
      BmpDest.Assign(BmpSrc);
   BmpDest.Canvas.TextOut(OffsetX,OffsetY, Text); 
end;

aprés on peu ajouter des parametres comme la police a utiliser etc
.
<hr size="2" width="100%" />Croc (click me)
Commenter la réponse de f0xi
ThWilliam 424 Messages postés mardi 3 janvier 2006Date d'inscription 26 novembre 2013 Dernière intervention - 14 févr. 2007 à 10:29
0
Utile
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
Commenter la réponse de ThWilliam
slhuilli 193 Messages postés lundi 7 janvier 2002Date d'inscription 7 juillet 2017 Dernière intervention - 14 févr. 2007 à 22:40
0
Utile
Merci a vous mais je n'arrive toujours pas a faire ce que je veux faire.....
Si vous aviez une routine ou fonction toute faite....
Commenter la réponse de slhuilli
ThWilliam 424 Messages postés mardi 3 janvier 2006Date d'inscription 26 novembre 2013 Dernière intervention - 16 févr. 2007 à 11:27
0
Utile
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.
Commenter la réponse de ThWilliam

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.