IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Texte sur image JPEG


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 30
    Points : 18
    Points
    18
    Par défaut Texte sur image JPEG
    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

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Utilise le TJPEGImage ou un TPicture, via le Canvas, tu fais DrawText ou TextOut
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    Bonjour,
    J'utilise C++ Builder XE2, et dans ma liste de composant je n'ai ni TJPEGImage, ni TPicture ...

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    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

    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;
      }
    }
    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
     
      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;
      }
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    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 :
    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;
    }
    Il fonctionne, mais étrangement le fichier de départ est de 485Ko et le fichier final est de 167Ko??!!
    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?

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    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
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    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...

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut

    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)

    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.
    C'est un peu ce que j'ai l'impression de faire ! Où dois-je envoyer la Facture ?


    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");
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    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!!

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    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 :

    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;
    }
    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.

    Je n'arrive vraiment pas à comprendre ce qui peut se passer, avez-vous une idée?

  11. #11
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    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);
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Texte sur image
    Par medchennani dans le forum Delphi
    Réponses: 5
    Dernier message: 05/03/2007, 13h06
  2. clic sur image JPEG
    Par flamel dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 03/02/2007, 23h37
  3. [ImageMagick] Insérer du texte sur image uploadée
    Par fabien14 dans le forum Bibliothèques et frameworks
    Réponses: 16
    Dernier message: 01/12/2006, 21h03
  4. fonctions d'image : texte sur image
    Par guy2004 dans le forum Langage
    Réponses: 2
    Dernier message: 10/08/2006, 09h56
  5. Réponses: 9
    Dernier message: 16/11/2005, 11h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo