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 :

conversion de jpg en bmp


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 60
    Par défaut conversion de jpg en bmp
    Bonjour,

    je travaille actuellement sur une Application android qui interagit avec un programme en c++. Or ce dernier utilise une image en bmp et avec android bien que je puisse manipuler les Bitmap, je ne peux pas enregistrer sur la sdcard d'image en bmp.

    Je pensais donc dans mon code Java déclarer une méthode native qui prendrait en paramètre une String (représentant le path du fichier en jpg) et dans mon code C++, transformer ce fichier en bitmap.

    La transmission de la String ne pose aucun problème, mais la conversion ne fonctionne pas ; les erreurs que m'indique cygwin sont :
    Graphics has not been declared
    Graphics has not been declared
    "bmp" was not declared in this scope
    "TJPEGImage" was not declared in this scope
    "jpg" was not declared in this scope
    expected type-specifier before 'TJPEGImage'
    expected type-specifier before 'Graphics'
    expected ';' before 'Graphics'

    Mon code est le suivant :
    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
     
    #include <Jpeg.hpp>
     
    extern "C" JNIEXPORT void
    JNICALL Java_com_exemple_monexemple_MonActivite_setImageFile( JNIEnv* env,
    		jobject,
    		jstring jFicJpg)
    {
    	const char* FicJpg = env->GetStringUTFChars(jFicJpg, 0);
    	using Graphics::TBitmap;
       	Graphics::TBitmap* bmp;
       	TJPEGImage *jpg = new TJPEGImage();
       	bmp = new Graphics::TBitmap ();
       	jpg->LoadFromFile(FicJpg);
       	bmp->Assign(jpg);
       	bmp->SaveToFile(ImageFile);
    }
    Ne connaissant pas du tout le C++, je ne sais pas si l'erreur provient du code lui-même ou du fait que la librairie utilisée est en .hpp alors que les autres sont en .h .

    Quelqu'un pourrait m'aider, en me donnant par exemple un code c++ permettant de faire la conversion jpg->bmp en utilisant uniquement des librairies .h?

    Merci d'avance pour vos réponses

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Je viens de terminer la lecture de votre post, et je ne suis pas sûr d'avoir tout compris.
    A première vue vous travaillez avec Borland. Essayez de rajouter cet include
    Je vais relire soigneusement votre question.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 60
    Par défaut
    Bonjour,

    Non, je ne travaille pas avec Borland.
    En fait, je fais une Application Android (avec principalement du Java) sous Eclipse qui fait appel à du code c++ (grâce au NDK qui permet l'appel à des fonctions c/c++). De plus, je suis sous Windows, donc pour compiler mon code C++, je suis obligée d'utiliser cygwin. La compilation génère une libraire libnomLib.so que j'utilise ensuite pour exécuter le code Java.

    Le problème, c'est que le code c++ (que je n'ai pas fait moi-même) nécessite de travailler avec des fichiers bmp enregistrés sur la carte mémoire du téléphone, or sous Android je peux seulement enregistrer des fichiers en jpg ou png (les images bmp étant trop lourdes) et je ne peux pas non plus utiliser les api de Java standard qui me permettraient de faire la conversion (par exemple, javax.imageio) car elles ne sont pas disponibles sous Android. Du coup, je suis forcée de faire cette conversion en c++.

    Comme je suis complètement novice en C++, j'aimerais un code qui me permettrait de faire cette conversion et qui utiliserait une dll que je pourrais intégrer dans mon application (car d'après les erreurs indiquées, j'ai l'impression que la librairie Jpeg.hpp ne s'intègre pas à mon application).

    Voilà, j'espère que c'est plus clair maintenant et si quelqu'un à la moindre idée, je suis preneuse!

  4. #4
    Invité
    Invité(e)
    Par défaut
    Suite,
    Je ne vois pas d'inconvénient à ce qu'y ait un fichier d'entête en hpp.
    Par contre, je ne connais pas le mot clé "using", mais si votre compilateur le connait, je mettrais plutôt
    puisque l'unité où se trouve la classe Graphics::TBitmap est Graphics.
    Dans mon code, j'écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
         jpg->LoadFromStream(FicJpg);
    //et non 	jpg->LoadFromFile(FicJpg);
    Sinon, je ne vois pas d'anomalie, j'utilise les mêmes fonctions.

    ...
    De la même façon que vous mettez
    using Graphics;
    // essayez de rajouter
    using Jpeg;
    Dernière modification par Invité ; 17/08/2010 à 15h16.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 60
    Par défaut
    Cela ne fonctionne pas (mettre uniquement "using Graphics" ou même enlever cette ligne) et c'est toujours les mêmes erreurs : j'ai l'impression que le compilateur ne reconnaît pas les éléments de la librairie Jpeg.hpp.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Je vais essayer de faire une DLL, mais ce sera la première fois.
    Par contre pour un petit .exe c'est sans problème.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 60
    Par défaut
    Merci beaucoup!

  8. #8
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 526
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 526
    Par défaut
    Salut,

    Citation Envoyé par androidisme Voir le message
    Cela ne fonctionne pas (mettre uniquement "using Graphics" ou même enlever cette ligne) et c'est toujours les mêmes erreurs : j'ai l'impression que le compilateur ne reconnaît pas les éléments de la librairie Jpeg.hpp.
    le code donnné ne fonctionnera jamais !
    C'est du code pour C++ Builder utilisant la Visual Component Library ( VCL ) !


    Sous Windows il faut utiliser les API Windows + jpeglib pour décompresser une jpeg dans un buffer
    Ou bien utiliser des codes sources comme CxImage.
    http://www.codeproject.com/KB/graphics/cximage.aspx

    Avec gdi+ c'est peut-être possible
    Si tu veux j'avais fait un morceau de code pour un projet perso utilisant des API win32,jpeglib pour décompresser une jpeg et l'afficher sous Direct X

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 60
    Par défaut
    Merci Mat.M, je veux bien ton code, ça m'aidera sûrement.
    Merci pour le lien aussi, je vais voir de ce côté également.

    J'aurais une question (probablement bête), il n'y aura pas de problème d'exécution sur un téléphone Android si on utilise des API windows?

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    J'ai fait le programme, mais pour l'instant, j'ai un petit souci pour construire un binaire qui inclue les librairies nécessaires.
    Je l'ai appelé jpg2bmp, mais ce programme existe déjà, vous le trouverez facilement avec une petite recherche sur google.
    Pour l'utiliser à partir de votre logiciel, il suffit de faire cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <stdlib.h>
    extern "C" JNIEXPORT void
    JNICALL Java_com_exemple_monexemple_MonActivite_setImageFile( JNIEnv* env,
    		jobject,
    		jstring jFicJpg)
    {
    	const char* FicJpg = env->GetStringUTFChars(jFicJpg, 0);
            char *commande[256];
            strcpy(commande,"jpg2bmp.exe "):
            strcat(commande,FicJpg);
            strcat(commande," ");
            strcat(commande,"LeFichierRes.bmp"); 
            system(commande);
    }
    Et ça devrait marcher.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 60
    Par défaut
    Merci pour votre aide mais je ne peux pas procéder de la sorte, car Android ne nous permet pas de lancer l'exécution d'un autre programme (j'avais essayé directement en java après avoir placé le .exe dans la sdcard -> permission denied).
    Sachant que la librairie jpeglib n'est pas considérée comme stable, je ne peux pas l'utiliser non plus, je vais devoir trouver un autre moyen!

    Merci encore!

Discussions similaires

  1. conversion jpg en bmp
    Par taouja dans le forum Imagerie
    Réponses: 1
    Dernier message: 18/06/2007, 18h14
  2. Conversion jpg en bmp en java
    Par taouja dans le forum Langage
    Réponses: 1
    Dernier message: 11/06/2007, 12h18
  3. convertir simplement un jpg en bmp
    Par Invité dans le forum Multimédia
    Réponses: 4
    Dernier message: 17/08/2005, 09h07
  4. conversion d'une image BMP
    Par didinel dans le forum Bibliothèques
    Réponses: 4
    Dernier message: 11/08/2005, 17h02
  5. Réponses: 3
    Dernier message: 03/03/2005, 17h27

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