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++ Discussion :

[votre avis] conversion d'images


Sujet :

C++

  1. #1
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 264
    Points : 6 683
    Points
    6 683
    Billets dans le blog
    2
    Par défaut [votre avis] conversion d'images
    Bonjour à tous,

    je dois implémenter une API en c++ qui prend une image en entrée, de type "usuel" (i.e. gif, bmp, png, etc.) et qui converti cette image en jpg. Avec éventuellement un "resize" au passage mais c'est pas obligé.

    Je voulais savoir si vous aviez déjà eu à faire cela, et quelle lib vous me conseillez. J'ai déjà jeté un coup d'oeil sur DevIL et ImageMagick, mais ni l'une ni l'autre ne convient parfaitement. DevIL est en C, et j'ai des soucis avec la fonction de conversion; et je ne trouve pas comment faire de conversion (sans passer par une ligne de commande) avec ImageMagick.

    Thanks dudes

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    Déja fait avec SDL.
    Pour la sauvegarde en jpg c'est simple, pour le resize un peu moins, il faut faire son propre algo. J'avais fait du simple resize (qui comme son nom l'indique est très simple) mais tu veux peut-être un meilleur algo.
    Après une petite recherche sur le site de SDL j'ai trouvé:
    SDL_Resize - A basic image resizing library, high quality output suited for prerendering images. Works as either C or C++ code. Should compile and run on All platforms

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 174
    Points
    1 174
    Par défaut
    avec image magick, tu fais un .load pour charger une image, tu affectes ensuite les différents paramètres que tu veux pour ton format d'export, et tu fais un .write en indiquant l'extension (.jpg) dans le nom.

    Normalement pour du .jpg il ne devrait pas y avoir de problème, pour d'autres formats c'est pas forcément évident.

  4. #4
    Membre chevronné
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Points : 2 107
    Points
    2 107
    Par défaut
    Citation Envoyé par r0d
    Bonjour à tous,

    je dois implémenter une API en c++ qui prend une image en entrée, de type "usuel" (i.e. gif, bmp, png, etc.) et qui converti cette image en jpg. Avec éventuellement un "resize" au passage mais c'est pas obligé.

    Je voulais savoir si vous aviez déjà eu à faire cela, et quelle lib vous me conseillez. J'ai déjà jeté un coup d'oeil sur DevIL et ImageMagick, mais ni l'une ni l'autre ne convient parfaitement. DevIL est en C, et j'ai des soucis avec la fonction de conversion; et je ne trouve pas comment faire de conversion (sans passer par une ligne de commande) avec ImageMagick.

    Thanks dudes
    La lib de traitement d'image CImg (C++) est faite pour fontionner avec la package image magik. De plus, la fonction resize est rapide et efficace!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    cimg_library::CImg<unsigned short> image ("nom.bmp"); // on load l'image
    image.resize(200,400);//un p'tit resize
    image.save(...);// on sauve
    Voilà..
    Le code est à revoir pour la partie load/save, mais le principe est là!

  5. #5
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 264
    Points : 6 683
    Points
    6 683
    Billets dans le blog
    2
    Par défaut
    Ok, merci à tous.
    C'est parti pour ImageMagick


  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Points : 46
    Points
    46
    Par défaut
    Finalement comment as tu fait pour résoudre ton cas ?
    Je dois convertir du pdf en jpg et je compte le faire avec Imagemagick.
    Je pensais également passer par une ligne de commande mais s'il y a possibilité de ne pas le faire je suis preneur mais je suis pas tres doué.

    Merci d'avance.

    (je travail sous borland C++ builder 6)

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 174
    Points
    1 174
    Par défaut
    avec magick++ ça devrait pas poser problème

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Points : 46
    Points
    46
    Par défaut
    Sous Dos, je fais pour importer ma librairie :
    implib -a -c CORE_RL_magick_.lib CORE_RL_magick_.dll

    Il ne me renvoie pas d'erreur.

    Dans mon fichier cpp, je rajouter #include <Magick++.h>

    et puis la
    soit j'inclus mon fichier lib (CORE_RL_Magick++_.lib) dans mon projet via la commande ajouter,
    soit j'ajoute a mon fichier cpp :
    #pragma link "c:\\ImageMagick\\CORE_RL_magick_.lib"

    Ensuite je tape mon code :
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    // define typedefs
    typedef void (*LPINITIALIZEMAGICK)(const char *);
    typedef Magick::Image* (*LPREADIMAGE)(const MagickLib::ImageInfo *, MagickLib::ExceptionInfo *);
    typedef HBITMAP (*LPIMGTOHBITMAP)(Magick::Image*);
    typedef void (*LPDESTROYIMAGE)(Magick::Image*);
    typedef void (*LPDESTROYMAGICK)();
    typedef void (*LPDESTROYEXCEPTIONINFO)(MagickLib::ExceptionInfo*);
    typedef void (*LPGETEXCEPTIONINFO)(MagickLib::ExceptionInfo*);
     
    LPDESTROYIMAGE lpDestroyImage;
    LPINITIALIZEMAGICK lpInitializeMagick;
    LPREADIMAGE lpReadImage;
    LPIMGTOHBITMAP lpImageToHBITMAP;
    HINSTANCE hLib;
    LPDESTROYMAGICK lpDestroyMagick;
    LPDESTROYEXCEPTIONINFO lpDestroyExceptionInfo;
    LPGETEXCEPTIONINFO lpGetExceptionInfo;
     
    // load library and init functions
    void __fastcall TForm1::Init()
    {
    if ( !hLib )
    {
    hLib = ::LoadLibrary("CORE_RL_Magick_.dll");
    lpInitializeMagick = (LPINITIALIZEMAGICK) GetProcAddress(hLib, "InitializeMagick");
    lpReadImage = (LPREADIMAGE)GetProcAddress(hLib, "ReadImage");
    lpDestroyImage = (LPDESTROYIMAGE)GetProcAddress(hLib, "DestroyImage");
    lpDestroyMagick = (LPDESTROYMAGICK)GetProcAddress(hLib, "DestroyMagick");
    lpDestroyExceptionInfo = (LPDESTROYEXCEPTIONINFO)GetProcAddress(hLib, "DestroyExceptionInfo");
    lpGetExceptionInfo = (LPGETEXCEPTIONINFO)GetProcAddress(hLib, "GetExceptionInfo");
    lpImageToHBITMAP = (LPIMGTOHBITMAP)GetProcAddress(hLib,"ImageToHBITMAP");
    lpInitializeMagick("");
    }
    }
    //------------------------------------------------------------------
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    MagickLib::ImageInfo imageInfo;
    MagickLib::ExceptionInfo exceptInfo;
    AnsiString s = "c:\\1.jpg";
    strcpy(imageInfo.filename,s.c_str());
    Magick::Image* im = lpReadImage (&imageInfo,&exceptInfo);
    if (im == NULL )
    ShowMessage (exceptInfo.reason);
    else
    {
    HBITMAP bmp = lpImageToHBITMAP(im);
    img1->Picture->Bitmap->Handle = bmp;
    lpDestroyImage(im);
    }
    }


    L'erreur à la compilation est : [C++ Erreur] Unit1.cpp(12): E2209 Impossible d'ouvrir le fichier include 'Magick++.h'

    donc cela vient du chargement de mon fichier h et de ma librairie.

    Mais je ne sais pas trop comment faire.
    J'ai essayé plusieurs solutions :
    - ajouter le fichier h au projet
    - Importer une bibliothèque de types
    - Ajouter au référentiel mais je ne trouve pas le bon cheminement

    Merci d'eclairer ma lanterne
    see you

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 174
    Points
    1 174
    Par défaut
    tu utiliserais pas ImageMagick en C plutôt que Magick++ là? une question comme ça, je suis pas sûr.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 93
    Points : 46
    Points
    46
    Par défaut
    Ouai j ai été un peu vite dans la rédaction de mon message

    ce qui donne en fait :
    implib -a -c CORE_RL_magick++_.lib CORE_RL_magick++_.dll

    #pragma link "c:\\ImageMagick\\CORE_RL_magick++_.lib"

    C'est ceci que j'ai fait réellement et cela ne fonctionne pas !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Débruitage d'images
    Par millie dans le forum Traitement d'images
    Réponses: 0
    Dernier message: 08/12/2008, 22h03
  2. Introduction au traitement numérique des images
    Par millie dans le forum Traitement d'images
    Réponses: 0
    Dernier message: 08/12/2008, 22h02
  3. Conversion IP-> Pays, ville. Votre avis
    Par rouliow dans le forum Services
    Réponses: 1
    Dernier message: 19/10/2007, 00h28
  4. Besoin de votre avis sur stocker image dans Blob
    Par Lideln dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 04/07/2006, 13h49

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