OBTENIT UN HBITMAP A PARTIR D UN JPEG GIF BMP SANS LES MFC

Pamaury Messages postés 341 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 17 juin 2008 - 12 sept. 2004 à 07:51
le_sonic Messages postés 7 Date d'inscription lundi 3 octobre 2005 Statut Membre Dernière intervention 18 février 2011 - 18 févr. 2011 à 15:12
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/26090-obtenit-un-hbitmap-a-partir-d-un-jpeg-gif-bmp-sans-les-mfc

le_sonic Messages postés 7 Date d'inscription lundi 3 octobre 2005 Statut Membre Dernière intervention 18 février 2011
18 févr. 2011 à 15:12
Personnellement, je n'ai pas de plantage,

mais aucune image ne s'affiche dans mon CControl...
Quelqu'un aurait une piste ?

Merci
Kian_ix Messages postés 26 Date d'inscription dimanche 18 février 2007 Statut Membre Dernière intervention 5 avril 2009
17 déc. 2008 à 05:15
pile ce qu'il me failait merci ^^
plus besoin de se faire chier avec ce CreateCompatibleBitmap de mrd !!!!
gf18 Messages postés 11 Date d'inscription jeudi 24 janvier 2008 Statut Membre Dernière intervention 9 juillet 2008
5 sept. 2008 à 19:45
Dans le cas d'un .bmp , la simple fonction suivante suffit :

HBITMAP hvar = (HBITMAP) LoadImage(NULL,"C:\path\fichier.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
cs_rainiou Messages postés 6 Date d'inscription lundi 31 octobre 2005 Statut Membre Dernière intervention 24 juin 2007
24 juin 2007 à 19:33
bon voila, apres quelques rechercher j'ai trouvé cette librairie :

http://members.cox.net/scottheiman/bmglib.htm

elle est tres bien ! elle recupere un HBITMAP a partir de differents types (et bien d'autrs fonctions sur les images) assez bien :

HBITMAP hBitmap = CreateBitmapFromJPEGFile( "mon_image.JPG" );

voila qui devrait participer a la resolution des prblemes de types ;)
cs_rainiou Messages postés 6 Date d'inscription lundi 31 octobre 2005 Statut Membre Dernière intervention 24 juin 2007
22 juin 2007 à 15:23
Salut!
voila j'ai un petit soucis... je suis pas un pro de c++ et encore moins de VC. Je suis sous VC7 (.net) et j'ai un soucis en utilisant ce script:

je suis alle voir la msdn qui conseil d'ailleurs d'utilisez CoInitializeEx pour les nouveaux programmes, il y a un parametre de plus : http://msdn2.microsoft.com/en-us/library/ms695279.aspx

Donc je test le CoInitializeEx (et non ex), cela me renvoit un code de reussite... de meme pour la conversion du path, mais lors de la conversion de l'image ca plante.

J'ai lu qu'il y avait des problemes avec OleLoadPicturePath si l'image de type JP(E)G, BMP, GIF ne sont pas bien "structures" allez savoir pourquoi... en ce qui me concerne j'ai donc teste sur plusieurs images crees avec PAINT (me disant que de MS a MS ca devrait aller) en differents formats, et j'ai toujours une erreur.

Quelqu'un aurait il eu le meme probleme en utilisant ce script? si oui quelle solution avez vous mis en place?

Est ce que le fait de desactiver cette librairie : "libcmt.lib" joue un role, ou egalement le fait que je soit en Single Threaded (je penche plus pour cette raison)?
genetin Messages postés 9 Date d'inscription jeudi 1 février 2007 Statut Membre Dernière intervention 6 décembre 2008
3 févr. 2007 à 12:41
Ca fonctionne très bien, bravo.

Mais à quoi sert le CopyImage() ?
J'ai assayé d'afficher directement la bitmap hPic, et ça fonctionne très bien (en évitant une copie qui semble inutile).
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 mars 2006 à 16:41
L'image a la taille qu'elle a et basta, c'est à toi de calculer pour StretchDIBits() par exemple.
cedekasme Messages postés 3 Date d'inscription jeudi 14 août 2003 Statut Membre Dernière intervention 15 mars 2006
15 mars 2006 à 16:20
Merci BruNews :)

J'ai corrigé quelques problèmes puis j'ai ajouté le fameux "CoInitialize(NULL)" dans l'initialisation de ma classe (logique lol), et cela marche!

Par contre, comment je peux faire pour que mon image ait une taille prédéfinie? En fait je me suis amusé avec get_Height(...) et get_Width(...) de la classe IPicture mais cela ne change rien à la taille de mon image.

Merci encore pour ton aide.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 mars 2006 à 15:13
C'est clair que sans chargement préalable de COM, pas d'accès aux interfaces.
Je ne me souviens plus où on met cela dans MFC, au besoin va voir un exemple ADO avec MFC sur codeguru et tu verras comment ils initialisent COM.
Ah quel plaisir les surcouches...
cedekasme Messages postés 3 Date d'inscription jeudi 14 août 2003 Statut Membre Dernière intervention 15 mars 2006
15 mars 2006 à 15:04
Salut à vous!

En ce qui me concerne j'ai un problème avec "OleLoadPicturePath(...)" car il ne me modifie pas la variable pPic qui par consequent reste toujours à NULL et qui entraine le plantage du programme sur :
"pPic->get_Handle((UINT*)&hPic);"

Est-ce que quelqu'un pourrait me dire d'où cela pourrait provenir ? Est-ce le fait de ne pas avoir mis CoInitialize(0) qui pourrait en etre la source ? car comme j'utilise la MFC, je ne sais pas à quel endroit je suis susceptible de le mettre. J'ai essayé à plusieurs endroits différents mais cela ne marche toujours pas...

Merci de votre aide.
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
15 déc. 2005 à 17:46
où je peux trouver <olectl.h> <ole2.h>
sjasmin Messages postés 6 Date d'inscription mercredi 7 janvier 2004 Statut Membre Dernière intervention 26 octobre 2005
24 oct. 2005 à 21:29
trop génial ce code :)
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
14 sept. 2004 à 21:00
C'est que tu dois avoir quelque part dans ton processus un truc qui declenche le chargement de COM sinon n'irait pas.
Pour assurer vu que c'est dans dll, mets un CoInitialize au debut dans DllMain.
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
14 sept. 2004 à 20:42
Le verification des retours est indispensable, je l'ai verifié a mes depends lol !!!
Par contre CoInitialize je lit dans la doc que c obligatoire mais moi je ne m'en suis pas servis et ca marche sans problemes, est ce que c'est parce je m'en sert dans une dll ????
cs_Boing Messages postés 15 Date d'inscription mardi 3 août 2004 Statut Membre Dernière intervention 3 janvier 2007
12 sept. 2004 à 21:05
la fonction output (générique printf) utilise wctomb et mbtowc pour effectuer la conversion ce qui revient au même de toute façon.
Par contre si tu utilises MFC (si si il en existe) tu peux utiliser %S avec CSting::Format.
Mais pour moi, c'est une question d'habitude et pas une religion ;o)
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
12 sept. 2004 à 20:11
Je pense que sprintf doit appeler MultiByteToWideChar a son tour, faudra que je pense a verifier.
Tant qu'on peut on evite d'inclure stdio.h dans un prog windows, API fournit tout en mieux et bien plus rapide.
cs_Boing Messages postés 15 Date d'inscription mardi 3 août 2004 Statut Membre Dernière intervention 3 janvier 2007
12 sept. 2004 à 20:04
Bien, sinon, GDI+ fait aussi plein de choses et permet de traiter les bmp, gif, png, tiff et jpeg en lecture et écriture.
Autre petite remarque, j'ai bien noter que le code vient de codeguru, mais pour convertir entre ANSI et UNICODE, je trouve plus simple d'utiliser sprintf avec %S (S majuscule) qui permet de convertir simplement en gardant les options de précisions et autres.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
12 sept. 2004 à 14:14
Precisions:
Mettre CoInitialize(0); dans WinMain.
Verifer les retours sinon crash:
if(OleLoadPicturePath(...)) return 0;
get_Handle() doit aussi retourner 0 pour valide.
Pamaury Messages postés 341 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 17 juin 2008 3
12 sept. 2004 à 07:51
j'avoue que je ne connaissait absolument pas .
Rejoignez-nous