begin process at 2012 02 09 06:36:21
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > BMP -> JPEG (JPG) PAR LIBRAIRIE FREEIMAGE ET DEV-C++

BMP -> JPEG (JPG) PAR LIBRAIRIE FREEIMAGE ET DEV-C++


 Information sur la source

Note :
8,25 / 10 - par 8 personnes
8,25 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Graphique Classé sous :bmp, jpg, bitmap, jpeg, freeimage Niveau :Débutant Date de création :29/01/2005 Date de mise à jour :08/01/2007 10:56:28 Vu / téléchargé :14 529 / 1 307

Auteur : yoyo269

Ecrire un message privé
Site perso
Commentaire sur cette source (29)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Comme j'avais mis du temps à trouver comment et un peu de mal à trouver les fichiers nécessaires à la compilation pour faire cette conversion, je me suis dit, je vais la proposer.

Pour ce qui est du code, je crois que tout est dans le titre, il convertit un BMP à préciser dans le code en un JPEG (JPG) dans le même dossier que l'exe sous le nom "Image.jpg".
Cette source utilise la célèbre librairie FreeImage.

Le ZIP contient tous les fichiers nécessaires à la compilation et au bon fonctionnement sous Dev-C++ (FreeImage.h, libfreeimage.a et FreeImage.dll).

Voilà j'espère que ça vous plaira.

Oubliez pas de mettre un petit commentaire avec un note ça sera sympa.

Source

  • //NE PAS OUBLIER DE METTRE LA DLL DANS LE MEME DOSSIER QUE l'EXE
  • #include <windows.h>
  • #include <freeimage.h>
  • LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
  • char szClassName[] = "WindowsApp";
  • HWND FenetrehWnd, BoutonhWnd;
  • int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)
  • {
  • MSG messages;
  • WNDCLASSEX wincl;
  • wincl.hInstance = hThisInstance;
  • wincl.lpszClassName = szClassName;
  • wincl.lpfnWndProc = WindowProcedure;
  • wincl.style = CS_DBLCLKS;
  • wincl.cbSize = sizeof (WNDCLASSEX);
  • wincl.hIcon = LoadIcon (NULL, "A");
  • wincl.hIconSm = LoadIcon (NULL, "A");
  • wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
  • wincl.lpszMenuName = NULL;
  • wincl.cbClsExtra = 0;
  • wincl.cbWndExtra = 0;
  • wincl.hbrBackground = (HBRUSH)(COLOR_3DFACE+1);
  • if (!RegisterClassEx (&wincl)) return 0;
  • FenetrehWnd = CreateWindowEx(0, szClassName, "Pour choisir le bitmap à modifier, modifier le code !", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 544, 375, HWND_DESKTOP, NULL, hThisInstance, NULL);
  • BoutonhWnd = CreateWindowEx(0, "BUTTON", "Convertir", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 50, 50, 100, 50, FenetrehWnd, (HMENU)1, hThisInstance, NULL);
  • ShowWindow (FenetrehWnd, nFunsterStil);
  • while (GetMessage (&messages, NULL, 0, 0))
  • {
  • TranslateMessage(&messages);
  • DispatchMessage(&messages);
  • }
  • return messages.wParam;
  • }
  • LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  • {
  • switch (message)
  • {
  • case WM_COMMAND:
  • if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == 1)
  • {
  • FIBITMAP * Image, * Image2;
  • FreeImage_Initialise(false);
  • // ICI POUR MODIFIER LE NOM DU FICHIER A CONVERTIR
  • //EX : "C:\\Mes Documents\\Image.bmp"
  • Image = FreeImage_Load(FIF_BMP, "Nouveau Image bitmap.bmp", 0);
  • Image2 = FreeImage_ConvertTo24Bits(Image);
  • //Le fichier sera créé dans le dossier où se trouve l'exécutable sous le nom Image.jpg
  • if (FreeImage_Save(FIF_JPEG, Image2, "Image.jpg", JPEG_QUALITYGOOD)) MessageBox(FenetrehWnd, "Conversion réalisée avec succès !", "Bravo !", MB_ICONINFORMATION);
  • else MessageBox(FenetrehWnd, "Echec de la conversion !", "Echec !", MB_ICONEXCLAMATION);
  • FreeImage_Unload(Image);
  • FreeImage_Unload(Image2);
  • FreeImage_DeInitialise();
  • }
  • break;
  • case WM_DESTROY:
  • PostQuitMessage (0);
  • break;
  • default:
  • return DefWindowProc (hwnd, message, wParam, lParam);
  • }
  • return 0;
  • }
//NE PAS OUBLIER DE METTRE LA DLL DANS LE MEME DOSSIER QUE l'EXE

#include <windows.h>
#include <freeimage.h>

LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

char szClassName[] = "WindowsApp";
HWND FenetrehWnd, BoutonhWnd;

int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)
{
    MSG messages;
    WNDCLASSEX wincl;

    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;
    wincl.style = CS_DBLCLKS;
    wincl.cbSize = sizeof (WNDCLASSEX);
    wincl.hIcon = LoadIcon (NULL, "A");
    wincl.hIconSm = LoadIcon (NULL, "A");
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;
    wincl.cbClsExtra = 0;
    wincl.cbWndExtra = 0;
    wincl.hbrBackground = (HBRUSH)(COLOR_3DFACE+1);

    if (!RegisterClassEx (&wincl)) return 0;

    FenetrehWnd = CreateWindowEx(0, szClassName, "Pour choisir le bitmap à modifier, modifier le code !", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 544, 375, HWND_DESKTOP, NULL, hThisInstance, NULL);
    BoutonhWnd = CreateWindowEx(0, "BUTTON", "Convertir", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 50, 50, 100, 50, FenetrehWnd, (HMENU)1, hThisInstance, NULL);

    ShowWindow (FenetrehWnd, nFunsterStil);

    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
    return messages.wParam;
}

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_COMMAND:
            if(HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == 1)
            {
                FIBITMAP * Image, * Image2;
                FreeImage_Initialise(false);
                
                // ICI POUR MODIFIER LE NOM DU FICHIER A CONVERTIR
                //EX : "C:\\Mes Documents\\Image.bmp"
                
                Image = FreeImage_Load(FIF_BMP, "Nouveau Image bitmap.bmp", 0);
                Image2 = FreeImage_ConvertTo24Bits(Image);
                
                //Le fichier sera créé dans le dossier où se trouve l'exécutable sous le nom Image.jpg
                
                if (FreeImage_Save(FIF_JPEG, Image2, "Image.jpg", JPEG_QUALITYGOOD)) MessageBox(FenetrehWnd, "Conversion réalisée avec succès !", "Bravo !", MB_ICONINFORMATION);
                else MessageBox(FenetrehWnd, "Echec de la conversion !", "Echec !", MB_ICONEXCLAMATION);
                FreeImage_Unload(Image);
                FreeImage_Unload(Image2);
                FreeImage_DeInitialise();
            }
        break;
        case WM_DESTROY:
            PostQuitMessage (0);
        break;
        default:
            return DefWindowProc (hwnd, message, wParam, lParam);
    }
    return 0;
}


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

26 août 2006 18:21:29 :
- Ajout du style XP
30 août 2006 09:51:39 :
Exexecutable à renommer de FreeImage.ex_ à FreeImage.exe.
08 janvier 2007 10:54:09 :
Libération de la mémoire allouée pour Image2 avec "FreeImage_Unload(Image2);".
08 janvier 2007 10:56:28 :
Libération de la mémoire allouée pour Image2 avec "FreeImage_Unload(Image2);".

 Sources du même auteur

Source avec Zip Source avec une capture YOYODOWN - TÉLÉCHARGEMENT HTTP [DEV-C++ 4.9.9.2]
Source avec Zip Source avec une capture YOYOMD5 - CALCUL ET AFFICHAGE DE LA CLEF MD5 D'UN FICHIER
Source avec une capture SCANNER DE DISQUES (RECURSIF)
Source avec Zip Source avec une capture TRACÉ DE COURBES À PARTIR D'UN FICHIER TEXTE (GDI)
Source avec Zip Source avec une capture YOYOCUT 2 - DÉCOUPE FICHIER [VISUAL C++ 2005 EXPRESS]

 Sources de la même categorie

Source avec Zip APPLICATION DE DESSIN DE QUELQUES FIGURES par laguchori
Source avec Zip Source avec une capture HDR EXPOSURE FUSION par mecrosoft
Source avec Zip Source avec une capture IRC CLIENT MULTISERVEUR EN MFC (TXIRC) par TeniX
Source avec Zip ENTETE DU FICHIER BMP (BIPMAP) par k.Lutchi
Source avec Zip Source avec une capture XCOUPE : COUPE 2D par pop70

 Sources en rapport avec celle ci

Source avec Zip QUICKSEE 1.0 par f_l_a_s_h_b_a_c_k
Source avec Zip Source avec une capture CONVERTIRREPERTOIRE, CONVERTISSEUR DE FICHIERS IMAGES AVEC F... par ndubien
Source avec Zip AFFICHER IMAGE PAR COM (WIN32) par BruNews
Source avec Zip Source avec une capture [C, WIN32/LINUX] LIB POUR TRAVAILLER DES IMAGES BITMAPS par katsankat
Source avec Zip IMAGES JPG ET GIF SANS LIBRAIRIE EXTERNE (WIN32) par vecchio56

Commentaires et avis

Commentaire de BruNews le 29/01/2005 15:00:51 administrateur CS

Inutile de décomposer wParam pour tester un clic bouton, BN_CLICKED = 0 !!!
if(wParam == 1) suffira.

Commentaire de yoyo269 le 29/01/2005 16:00:50

Merci pour l'info, je savais pas.

YOYO, @+.

Commentaire de Boing le 30/01/2005 12:30:53

En étant sous Windows, pourquoi ne pas utiliser simplement GDI + pour cela ?

Commentaire de Kirua le 30/01/2005 12:48:17

Peut-être justement parce qu'il ne veut pas rester bloqué sous windows ;)

Commentaire de yoyo269 le 30/01/2005 13:14:25

GDI +, c'est quoi ?
Ca m'intéresse. Si tu pouvais m'en dire plus Boing.

YOYO, @+.

Commentaire de Boing le 01/02/2005 09:16:16

Hello,
GDI+ est une API graphique fournie en standard avec XP et Server 2003 (elle est dispo en redist pour 98, Me et 2000).

Elle gère les fichiers JPG, TIFF, PNG, l'alpha-blending, l'antialiasing, certaines transformations géométriques et  certaines transformations dans l'espace de couleur.

Ce n'est pas forcément le top du top, mais par rapport à GDI c'est super pratique.

Voilà en gros.
a+

Commentaire de yoyo269 le 18/02/2005 22:50:20

Quand vous mettez des sales notes mettez au moins un commentaire.
Ca serait bien que BruNews change ça.
Mettre un commentaire pour pouvoir mettre une note.
Sinon ya des petits malins qui s'amusent à mettre des caisses.

YOYO, @+.

Commentaire de BruNews le 18/02/2005 23:27:44 administrateur CS

Désolé mais il y a affluence de tarés en ce moment et je ne peux pas passer la journée à leur courir après.
Rassure toi, ce n'est les notes qui feront ta valeur, le mieux est de les ignorer.

Commentaire de yoyo269 le 19/02/2005 00:29:57

Je sais bien Brunews, mais c'est quand même frustrant qu'un petit c.. vienne te mettre une sale note après avoir passer plusieurs heures sur un truc.
En tout cas merci encore pour tout ce que tu fais.

YOYO, @+.

Commentaire de TinkerBell2 le 15/12/2005 15:38:41

Bonjour,
j'ai beaucoup de mal à intégrer FreeImage à mon projet (en visual C++ v6) et pourtant j'ai absolument besoin de l'utiliser... J'ai tout essayé... Pas facile de débuter ! Est ce que quelqu'un serait assez aimable pour me détailler la marche à suivre ? Ca serait adorable ! Merci d'avance.
M (désespérée...)

Commentaire de yoyo269 le 15/12/2005 20:02:50

Le principe de base c'est d'inclure la librairie dans les options du compilateur, et de bien mettre <freeimage.h> dans ton programme.
Normalement dans ce cas là, la compilation doit se passer sans pb.

YOYO, @+.

Commentaire de breton51 le 20/02/2006 11:58:30

bonjour
merci pour ta source elle marche très bien la convertion en jpg est impecable.
cependant j'ai un petit pb de memoire je m'expique
1 je lance l'apli           mémoir util. dans gestionnaire 2012ko
2 j'appui sur convertir     mémoir util. 6836ko
3 je valide la convertion   mémoir util. 4544ko
4 je rappui sur convertir   mémoir util. 9208ko
5 je revalide               memoir util. 6904ko
ex.........

saurais tu de quoi ça vien car la je ne comprend
j'ai essayer avec ton exe et en recompilant avec devcpp idem.
j'ai aussi essayer la source
http://www.cppfrance.com/codes/BMP2JPG_28263.aspx
avec quelque modif pour pouvoir faire tourner le pg en boucle
même pb

merci d'avance.

Commentaire de yoyo269 le 20/02/2006 12:02:11

Alors là tu m'en poses une belle. J'y jette un oeil et je te tiens au courant.

YOYO, @+.

Commentaire de yoyo269 le 20/02/2006 14:18:55

J'ai regardé le programme et franchement je vois pas comment faire.
Ya bien un moyen de libérer de la mémoire mais ça va sûrement pas te convenir.
C'est de réduire ta fenêtre, tu verras ça marche nickel.

YOYO, @+.

Commentaire de breton51 le 20/02/2006 14:46:14

merci pour ta reponce

effectivement ca marche bien la memoir est bien libérer
je vais chercher dans ce sens une solution qui permetrai de reduir la fenetre principal lors de l'affichage de la fenetre de validation et qui réaficherai la première ensuite.

  

Commentaire de CChargy le 07/01/2007 14:24:38

Heu en parlant de la mémoire, tu créer FIBITMAP * Image, * Image2;
et tu ne détruit que FreeImage_Unload(Image);. Donc voila je pense que c'est l'Image2 qui prend de la place. Et comme c'est un pointeur, elle n'est pas détruite a la fin de la fonction ...
Voila

Colin CHARGY

Commentaire de BruNews le 07/01/2007 19:44:05 administrateur CS

Me semble effectivement que Image2 sera le résultat d'une alloc de la part de la lib FreeImage, auquel cas il faut appeler la désalloc.

Commentaire de yoyo269 le 07/01/2007 20:25:43

Merci CChargy et merci BruNews pour avoir confirmé !
Je vais modifier cela. Par contre, une petite question, un pointeur n'est pas détruit à la fin de la fonction ???


YOYO, @+.

Commentaire de CChargy le 07/01/2007 20:31:19

Hello,
Pour répondre à ta question, si le pointeur est détruit mais la variable sur quoi il pointe lui n'est pas automatiquement détruit.
Et en l'occurence pour FreeImage, pour détruire une image (variable impossante ne mémoire et qui expliquerait la fuite de mémoire, mais pourquoi elle n'existe plus après redimmentionnement de la fenètre, sa c'est un mistère).
Heureusement, FreeImage nous donne cette fonction :
FreeImage_Unload(Image2);
Voila si tu as encore besoin d'aide ...
Colin CHARGY

Commentaire de BruNews le 07/01/2007 20:34:50 administrateur CS

yoyo > faut pas confondre le pointeur (les 4 octets referençant l'adresse) et la zone mémoire pointée par ce pointeur.
Le pointeur local à la func disparait bien puisque ce n'est qu'un offset de ESP mais la zone mémoire ne sera jamais libérée si personne n'apelle le gestionnaire mémoire du système.

Commentaire de yoyo269 le 08/01/2007 11:55:06

Ca y est le code source est modifié.
Je ne confonds pas le pointeur et ce qu'il pointe, mais je pensais qu'une zone mémoire qui n'est plus pointée du tout, était automatiquement libérée.
J'espère que je ne dit pas d'ânerie ! :(

En tous cas, maintenant le souci ne se pose avec "FreeImage_Unload(Image2);".

YOYO, @+.

Commentaire de BruNews le 08/01/2007 12:08:56 administrateur CS

pointée, mais ça n'a pas de sens, qui le saurait ???

BYTE *p;
p = (BYTE*) 0x1000;

qui sera au courant de mon délire ? absolument personne.
Nimporte quelle variable contient une valeur, pointeur ou autre ce n'est qu'une façon de la regarder et de l'utiliser, pas pour autant que les zones mémoires se trouvant à ces valeurs seront affectées de qlq manière.

Commentaire de yoyo269 le 08/01/2007 12:31:27

Merci pour l'éclaircissement BruNews !

YOYO, @+.

Commentaire de Kirua le 08/01/2007 19:26:19

Tu faisais du java avant? Parce que dans ce langage effectivement, un système de "garbage collecting" (ramasse miettes) garde trace du nombre de variables qui "pointent" sur un objet, et lorsque plus personne ne sait ou l'objet est, il est détruit (automatiquement).

Ce n'est pas le cas en C++, et c'est un des choses qui lui confère sa puissance et sa vitesse ... mais un peu au détriment du confort immédiat du programmeur (quoique ... ;)).

Commentaire de BruNews le 08/01/2007 19:33:35 administrateur CS

Le confort est aussi dans la liberté et la responsabilité, pas l'assistencialisme.

Commentaire de Kirua le 08/01/2007 19:35:17

On est bien d'accord ^^.

Commentaire de BruNews le 08/01/2007 19:44:31 administrateur CS

Ben si SarkoLène nous lit on est mal, hi hi.

Commentaire de yoyo269 le 08/01/2007 20:07:23

Non Kirua pas de java. Mais c'est pas impossible que j'ai vu ça pour un autre langage.

YOYO, @+.

Commentaire de Silince le 20/08/2009 15:37:39

He bien merci yoyo, je crois qu'a l'avenir je vais avoir du mal a me passer de tes
services.... J'avais justement besoin de ce genre de convertion.
Ca fait deux fois que tu m'aides pendant mon stage, mon ardoise s'agrandit...

DSL de raviver un post vieux de @ ans et demi.

Tcho

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

BMP to JPEG [ par lektrosonic ] Bonjour, Enfait je souhaite envoyer des HBITMAP en reseaux. L'ideal est biensur de transofrmer en JPEG avant d'envoyer. Mais je ne veux pas ecrire le Convertir un .bmp en jpg/gif/png [ par AMS010 ] Bonjour, J'ai fait il y'a quelques temps un programme qui fait des captures d'écran à intervalles de temps réguliers et qui les enregistre dans un fic Adapter taile d'un CButton a Bitmap [ par Nixeus ] Bonjour a tous,J'utilise cette méthode a fin de mettre un bitmap sur un CButton, HBITMAP m_bmp; HINSTANCE resource; resource = AfxGetResourceHandle(); PCL & RASTER [ par pipocodesrc ] Bonjour à tous, j'aimerai savoir si il existe un exemple en C/C++/Java/.. pour ceonvertir une image(EMF/BMP/JPEG..) en PCL (raster) puis l'envoyer ver redimenssion image avec hbitmap [ par glipper ] bonjour,j'ai reussi à charger une image depuis un fichier, et la faire apparaître dans un boutons (dans une dialogbox). J'ai donc procédé comme ceci : Charger dynamiquement BMP dans un "PICTURE" [ par Nixeus ] Bonjour a tous !Je développe une mfc.Je viens de positionner un controle "PICTURE" sur ma boite de dialogue.Je souhaiterais qu'en fonction de certaine transformer le fichier .dcm en jpeg ou bmp [ par jaouaditm ] salutavez vous un code en c ou c++ qui permet de transformer l'image .dcm en .bmp ou .jpegmerci et bien à vous<table id="HB_Mail_Container" height="10 fichier image (bmp, jpg) à convertir en fichier txt [ par develdelphi ] Bonjour,Je cherche un code pouvant représenter un fichier image N/B en fichier texte. C'est un sujet sur les traitements d'images assez difficile je r Fonctions de FreeImages [ par squellettor ] Bonjour,Je suis entrain de d&#233;couvrir coment marche la librarie FreeImage, mais certaine fonction ne marche pas :La fonction de resize&nbsp;me ren Conversion Jpeg BMP pour C++ Builder 4 [ par ygor ] Voila , comme le dit le topic je desirerai savoir comment convertir une image jpg en bmp avec c ++ builder je ne sai pas torp utilis&#233; Tbitmap, T


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,154 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales