Bonjour,
J'utilise C++ Builder XE2, et j'aimerais tout simplement ajouter du texte sur une image JPEG puis enregistrer les modifications, mais je ne sais pas du tout comment faire, pouvez-vous m'aider?
Merci
Bonjour,
J'utilise C++ Builder XE2, et j'aimerais tout simplement ajouter du texte sur une image JPEG puis enregistrer les modifications, mais je ne sais pas du tout comment faire, pouvez-vous m'aider?
Merci
Utilise le TJPEGImage ou un TPicture, via le Canvas, tu fais DrawText ou TextOut
Bonjour,
J'utilise C++ Builder XE2, et dans ma liste de composant je n'ai ni TJPEGImage, ni TPicture ...
La Palette de composant ne contient qu'une partie infime des classes RTL et VCL !
Faudrait faire un petit effort
Voir la documentation de TJPEGImage ou de TPicture
Tient, j'ai ce code, à l'époque de Delphi 6, c'est globalement similaire en XE2 (quoi qu'on peut faire plus court), en voici un rapide traduction du couple TJPEGImage\TBitmap
en théorie, en XE2, le JPEG est implicite, code à tester
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 TJPEGImage* DummyJPEg = new TJPEGImage(); try { DummyJPEg->LoadFromFile("C:\\Dossier\\Fichier.JPEG"); TJPEGImage* DummyBitmap = new TBitmap(); try { DummyBitmap->Assign(DummyJPEg); DummyBitmap->Canvas->TextOut(10, 10, 'Mon Texte'); DummyJPEg->Assign(DummyBitmap); DummyJPEg->SaveToFile("C:\\Dossier\\Fichier.JPEG"); } __finally { delete DummyBitmap; } __finally { delete DummyJPEg; } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 TPicture* DummyPicture = new TPicture(); try { DummyPicture->LoadFromFile("C:\\Dossier\\Fichier.JPEG"); DummyPicture->Bitmap->Canvas->TextOut(10, 10, 'Mon Texte'); DummyPicture.SaveToFile("C:\\Dossier\\Fichier.JPEG"); // Je crois, a vérifier qu'il va lire l'extension ! } __finally { delete DummyJPEg; }
Effectivement il y a plein de choses que je ne connais pas encore sur C++ Builder, mais j'ai prévu de suivre une formation
J'ai testé le code 2, et si je mets "DummyPicture->Bitmap->Canvas->TextOut(10, 10, 'Mon Texte');" le fichier final est créé mais ne contient pas d'image.
J'ai testé le code 1 :
Il fonctionne, mais étrangement le fichier de départ est de 485Ko et le fichier final est de 167Ko??!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 TJPEGImage* DummyJPEG = new TJPEGImage(); try { DummyJPEG->LoadFromFile("image01.jpg"); TBitmap* DummyBitmap = new TBitmap(); try { DummyBitmap->Assign(DummyJPEG); DummyBitmap->Canvas ->TextOut(100,100,"test01"); DummyJPEG->Assign(DummyBitmap); DummyJPEG->SaveToFile("test01.jpg"); } __finally { delete DummyBitmap; } } __finally { delete DummyJPEG; }
De plus, pour le moment j'ai du texte noir, sur fond blanc, pas de choix de couleur ni de taille (juste la position)
N'y aurait-il pas moyen de créer un TLabel, avec des paramètres de font,color,size ... et de l'incruster dans l'image à une position choisi?
Pour le changement de taille, il faut fouiller dans les options comme TJPEGImage.CompressionQuality
Pour la couleur, Canvas, Brush, Font, TBrushStyle ... il faut que tu fouilles un peu plus !
Ton but est de modifier l'Image JPEG ?
Ou de l'afficher avec juste un texte par dessus ?
Si c'est juste l'afficher, un TImage->Picture->LoadFromFile ...
Ensuite, le TLabel pourrait avoir des difficultés à se dessiner par dessus un TImage (faudrait jouer avec BringToFront)
Mais un Panel avec ParentBackGround à True devient transparent, et donc on voit le TImage en dessous
Idem avec un TSpeedButton ou TStaticText
Le but est d'avoir exactement la même image (même qualité) mais d'ajouter du texte dessus, mais la fonction que tu m'as proposé ne permet pas de jouer sur la taille et la couleur du texte...
Je veux bien t'aider mais là tu abuses un peu !
Les règles du Club - 4.13. Lycéen, collégien, étudiant, (bref un apprenti développeur)
C'est un peu ce que j'ai l'impression de faire ! Où dois-je envoyer la Facture ?Nous ne sommes pas là pour faire vos exercices.
Entendez par là que nous serons bien évidemment tout à fait d'accord de vous aider à résoudre votre problème, pour autant que vous fassiez vous-même des efforts.
Postez votre question, mais proposez également un début de solution, un bout de code, etc. En aucun cas, nous ne ferons le travail à votre place.
Merci de votre compréhension.
La Formation est urgente !
Mais avec un peu d'effort en lisant la documentation, tu aurais du trouver !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 DummyBitmap->Canvas->Brush->Style = bsClear; DummyBitmap->Canvas->Font->Color = clRed; DummyBitmap->Canvas->Font->Size = 20; DummyBitmap->Canvas->Font->Name = "Comic Sans MS"; DummyBitmap->Canvas->Font->Style = TFontStyles(DummyBitmap->Canvas->Font->Style) << fsBold << fsUnderline; DummyBitmap->Canvas ->TextOut(100,100,"test01");
Personnellement je ne pense pas abuser. J'ai passé du temps à chercher avant de poser la question sur un forum.
Ca fait 6 ans que je développe sur c++ builder (pas en permanence, je fais aussi d'autres choses) et je me suis auto-formé en faisant tout les tuto, tous les exemple de "Développez.com", tous les trucs et astuces... je pense avoir apprit pas mal de chose, j'ai fais des programmes qui "tournent"... peu être pas tout à fait "propre" mais bon ...
C'est en faisant l'acquisition récemment de la version XE2 que je me suis dit : là c'est le moment de faire une formation ... déjà la formation de base car c'est évident qu'il y a des choses de base que je ne connais pas. enfin bref!
Tu sais qu'il était possible de trouver ça dans l'aide car tu sais où chercher, puisque tu as la solution, mais le plus dure pour trouver dans l'aide c'est de savoir "quoi" chercher, je n'avais pas compris toute la subtilité des "canvas", maintenant grâce à toi j'ai compris
En tout cas merci de ton aide!!
Me revoila après un petit moment pour essayer de résoudre un problème lié à l’incrustation de texte sur l'image.
J'ai un programme qui tourne en permanence est qui prend 5 photos toutes les minutes. Sur chaque photo j'écris 10 lignes de texte de la façon suivante :
La grande majorité du temps tout ce passe bien, mais périodiquement, certaine ligne de texte ne sont pas écrient. Ce n'est jamais les mêmes. Parfois c'est toutes les lignes de texte qui ne sont pas écrite sur l'image.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 TJPEGImage* DummyJPEG = new TJPEGImage(); try { DummyJPEG->LoadFromFile(FileName_Photo_En_Cours); TBitmap* DummyBitmap = new TBitmap(); try { DummyBitmap->Assign(DummyJPEG); DummyBitmap->Canvas->Brush->Style=bsClear; DummyBitmap->Canvas->Font->Size=30; DummyBitmap->Canvas->Font->Color = (TColor)0x006B6B6B; DummyBitmap->Canvas->TextOut(50,1000,DatePhoto); DummyBitmap->Canvas->TextOut(50,1050,TimePhoto); DummyBitmap->Canvas->TextOut(50,1100,Edit1->Text); DummyBitmap->Canvas->TextOut(50,1150,Edit2->Text); DummyBitmap->Canvas->TextOut(50,1200,Edit3->Text); DummyBitmap->Canvas->TextOut(1400,50,Edit4->Text); DummyBitmap->Canvas->TextOut(1400,100,Edit5->Text); DummyBitmap->Canvas->TextOut(1400,150,Edit6->Text); DummyBitmap->Canvas->Font->Style = TFontStyles(DummyBitmap->Canvas->Font->Style)<< fsBold<<fsItalic; DummyBitmap->Canvas->TextOut(1600,1150,Edit7->Text); DummyBitmap->Canvas->TextOut(1600,1200,Edit8->Text); DummyJPEG->Assign(DummyBitmap); DummyJPEG->CompressionQuality=100; DummyJPEG->SaveToFile(FileName_Photo_En_Cours); } __finally { delete DummyBitmap; } } __finally { delete DummyJPEG; }
Je n'arrive vraiment pas à comprendre ce qui peut se passer, avez-vous une idée?
Tes Images sont toujours assez grande pour accueillir des texte à plus de 1000 pixel vertical ou horizontal ?
Utilise un TImage pour déboguer et avoir un aperçu du DummyBitmap
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 DummyBitmap->Canvas->TextOut(1600,1200,Edit8->Text); Image1->Picture->Bitmap->Assign(DummyBitmap); DummyJPEG->Assign(DummyBitmap);
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager