Accueil > > > AFFICHAGE D'IMAGES JPG AVEC IPICTURE EN C
AFFICHAGE D'IMAGES JPG AVEC IPICTURE EN C
Information sur la source
Description
A la demande de BruNews, et en réponse à une question du forum, voici un petit code source en C montrant comment afficher une image JPG en utilisant l'interface COM IPicture.
Source
- #include <windows.h>
- #include <olectl.h>
-
- // Variables globales:
- char chemin[260];
- WNDPROC OldStaticProc;
-
- // Fonction d'affichage de l'image JPG:
- void AfficheImage(char* path, HWND hwndcible)
- {
- // Variables:
- IPicture* pic;
- HRESULT hres;
- HDC hdc;
- RECT rect;
- int hauteur, largeur;
- WCHAR wpath[260];
- // Convertir le chemin en UNICODE:
- MultiByteToWideChar(0,0,path,-1,wpath,260);
- // Ouverture de l'image:
- hres = OleLoadPicturePath(wpath, 0,0, 0, &IID_IPicture, (void**)&pic);
- // Obtenir le HDC du controle cible:
- hdc=GetDC(hwndcible);
- // Obtenir la zone cliente du controle cible:
- GetClientRect(hwndcible,&rect);
- // Obtenir la largeur et la hauteur de l'image:
- hres=pic->lpVtbl->get_Width(pic,&largeur);
- hres=pic->lpVtbl->get_Height(pic,&hauteur);
- // Afficher l'image:
- hres=pic->lpVtbl->Render(pic,hdc,0,0,rect.right,rect.bottom,0,hauteur,largeur,-hauteur,0);
- // Libérer le HDC du controle cible:
- ReleaseDC(hwndcible,hdc);
- //Libérer l'interface IPicture:
- pic->lpVtbl->Release(pic);
- }
-
- // Procédure de sous-classement de notre Static:
- LRESULT WINAPI StaticProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- // Traitement du message WM_PAINT:
- if(message==WM_PAINT)
- {
- PAINTSTRUCT ps;
- BeginPaint(hwnd,&ps);
- // Appeler la fonction d'affichage de l'image:
- AfficheImage(chemin,hwnd);
- EndPaint(hwnd,&ps);
- return 0;
- }
- // Appeler la procédure par défaut des Statics:
- return CallWindowProc(OldStaticProc, hwnd, message, wParam, lParam);
- }
-
- // Procédure de notre boite de dialogue:
- BOOL WINAPI DialogProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
- {
- // Variables:
- static HWND hStatic,hQuitter;
-
- switch(message)
- {
- case WM_INITDIALOG:
- // Former le chemin complet de l'image:
- GetCurrentDirectory(260,chemin);
- lstrcat(chemin,"\\image.jpg");
- // Donner un titre à la boite de dialogue:
- SetWindowText(hDlg,"Affichage d'images JPG avec IPicture");
- // Créer les controles:
- hQuitter=CreateWindow("BUTTON","Quitter",WS_VISIBLE | WS_CHILD ,424,130,60,20,hDlg,0,0,0);
- hStatic=CreateWindowEx(0,"STATIC","",WS_VISIBLE | WS_CHILD | SS_SUNKEN,10,10,400,260,hDlg,0,0,0);
- // Sous-classer le Static:
- OldStaticProc=(WNDPROC)SetWindowLong(hStatic,GWL_WNDPROC,(LONG)StaticProc);
- // Changer la police du bouton "Quitter":
- SendMessage(hQuitter,WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT),0);
- break;
-
- case WM_COMMAND:
- // Fermer la boite de dialogue si clic sur "Quitter":
- if((HWND)lParam==hQuitter) EndDialog(hDlg,0);
- break;
-
- case WM_CLOSE:
- // Fermer la boite de dialogue:
- EndDialog(hDlg,0);
- break;
-
- default:
- break;
- }
- return 0;
- }
-
- int WINAPI WinMain(HINSTANCE hinst, HINSTANCE prev, LPSTR cmd, int show)
- {
- // Déclaration d'une structure DLGTEMPLATE:
- LPDLGTEMPLATE lpdt;
- // Initialiser la librairie COM pour notre application:
- CoInitialize(0);
- // Allouer de la mémoire pour notre structure DLGTEMPLATE:
- lpdt = ( LPDLGTEMPLATE) GlobalAlloc(GPTR, 512);
- if (!lpdt) return 1;
- // Définir les styles et les dimensions de la boite de dialogue:
- lpdt->style = WS_SYSMENU | WS_MINIMIZEBOX | DS_CENTER ;
- lpdt->x = 0; lpdt->y = 0; lpdt->cx =250; lpdt->cy = 152;
- // Lancer la boite de dialogue:
- DialogBoxIndirectParam(0,lpdt,0,(DLGPROC)DialogProc,(LPARAM) 0);
- // Libérer la mémoire allouée pour notre structure DLGTEMPLATE:
- GlobalFree((HGLOBAL) lpdt);
- // Libérer la librairie COM:
- CoUninitialize();
- return 0;
- }
#include <windows.h>
#include <olectl.h>
// Variables globales:
char chemin[260];
WNDPROC OldStaticProc;
// Fonction d'affichage de l'image JPG:
void AfficheImage(char* path, HWND hwndcible)
{
// Variables:
IPicture* pic;
HRESULT hres;
HDC hdc;
RECT rect;
int hauteur, largeur;
WCHAR wpath[260];
// Convertir le chemin en UNICODE:
MultiByteToWideChar(0,0,path,-1,wpath,260);
// Ouverture de l'image:
hres = OleLoadPicturePath(wpath, 0,0, 0, &IID_IPicture, (void**)&pic);
// Obtenir le HDC du controle cible:
hdc=GetDC(hwndcible);
// Obtenir la zone cliente du controle cible:
GetClientRect(hwndcible,&rect);
// Obtenir la largeur et la hauteur de l'image:
hres=pic->lpVtbl->get_Width(pic,&largeur);
hres=pic->lpVtbl->get_Height(pic,&hauteur);
// Afficher l'image:
hres=pic->lpVtbl->Render(pic,hdc,0,0,rect.right,rect.bottom,0,hauteur,largeur,-hauteur,0);
// Libérer le HDC du controle cible:
ReleaseDC(hwndcible,hdc);
//Libérer l'interface IPicture:
pic->lpVtbl->Release(pic);
}
// Procédure de sous-classement de notre Static:
LRESULT WINAPI StaticProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
// Traitement du message WM_PAINT:
if(message==WM_PAINT)
{
PAINTSTRUCT ps;
BeginPaint(hwnd,&ps);
// Appeler la fonction d'affichage de l'image:
AfficheImage(chemin,hwnd);
EndPaint(hwnd,&ps);
return 0;
}
// Appeler la procédure par défaut des Statics:
return CallWindowProc(OldStaticProc, hwnd, message, wParam, lParam);
}
// Procédure de notre boite de dialogue:
BOOL WINAPI DialogProc( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
{
// Variables:
static HWND hStatic,hQuitter;
switch(message)
{
case WM_INITDIALOG:
// Former le chemin complet de l'image:
GetCurrentDirectory(260,chemin);
lstrcat(chemin,"\\image.jpg");
// Donner un titre à la boite de dialogue:
SetWindowText(hDlg,"Affichage d'images JPG avec IPicture");
// Créer les controles:
hQuitter=CreateWindow("BUTTON","Quitter",WS_VISIBLE | WS_CHILD ,424,130,60,20,hDlg,0,0,0);
hStatic=CreateWindowEx(0,"STATIC","",WS_VISIBLE | WS_CHILD | SS_SUNKEN,10,10,400,260,hDlg,0,0,0);
// Sous-classer le Static:
OldStaticProc=(WNDPROC)SetWindowLong(hStatic,GWL_WNDPROC,(LONG)StaticProc);
// Changer la police du bouton "Quitter":
SendMessage(hQuitter,WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT),0);
break;
case WM_COMMAND:
// Fermer la boite de dialogue si clic sur "Quitter":
if((HWND)lParam==hQuitter) EndDialog(hDlg,0);
break;
case WM_CLOSE:
// Fermer la boite de dialogue:
EndDialog(hDlg,0);
break;
default:
break;
}
return 0;
}
int WINAPI WinMain(HINSTANCE hinst, HINSTANCE prev, LPSTR cmd, int show)
{
// Déclaration d'une structure DLGTEMPLATE:
LPDLGTEMPLATE lpdt;
// Initialiser la librairie COM pour notre application:
CoInitialize(0);
// Allouer de la mémoire pour notre structure DLGTEMPLATE:
lpdt = ( LPDLGTEMPLATE) GlobalAlloc(GPTR, 512);
if (!lpdt) return 1;
// Définir les styles et les dimensions de la boite de dialogue:
lpdt->style = WS_SYSMENU | WS_MINIMIZEBOX | DS_CENTER ;
lpdt->x = 0; lpdt->y = 0; lpdt->cx =250; lpdt->cy = 152;
// Lancer la boite de dialogue:
DialogBoxIndirectParam(0,lpdt,0,(DLGPROC)DialogProc,(LPARAM) 0);
// Libérer la mémoire allouée pour notre structure DLGTEMPLATE:
GlobalFree((HGLOBAL) lpdt);
// Libérer la librairie COM:
CoUninitialize();
return 0;
}
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
[Recherche] Programmeur c++ (SawgeniuS) [ par akfrlindsay ]
[center][img]http://2.bp.blogspot.com/-52RSSo3nJOk/TZ-2dTHzMvI/AAAAAAAAAAk/NwgOKWpQTSQ/s1600/logo-banniere.png[/img][/center] SawgeniuS is 3D MMORPG
Réseau de neurone - Erreur avec ma propre fonction de transfert [ par sondos01 ]
Bonjour, J'effectue un entrainement d' un Réseau de neurones dans lequel j'ajoute une fonction de transfert que j'ai moi même crée. La fonction de t
Com RS232 [ par Dohko10270 ]
Bonjour, Actuellement je cherche à récupérer une trame via la liaison RS232, je réussi très bien à faire ce que je veux à l'aide d'hyperterminal, c'e
Comment envoyer un 0x00 ou caractere NULL sur port com [ par CodeSteph ]
Tout d'abord, merci à toi/vous de te pencher sur mon pb ou deja d'en prendre connaissance. Je souhaite piloter un equipement electronique via port com
Gerer une liaison serie avec un cable de conversion USB/Serie [ par locotracteur ]
Bonjour, je souhaite dialoguer avec une carte Arduino a base de PIC . Jai réalisé un programme d'echo dans le pic de la carte Arduino( retourne le ca
JPG dans une DialogBox avec les MFC [ par ZeGot ]
Bonjour,Je cherche à afficher une image JPG dans une dialog box (J'utilise les MFC), cette image devant pouvoir être changée par le programme (Ex : L'
Jpg? [ par JediMaster ]
Salut a tous je voudrais savoir comment charger une image .jpg sur une surface directdraw. il existe une routine ou faut se la faire
transformer une image pgm (non compressé) en jpg [ par cartouh ]
salut,je suis en train de continuer un programme de traitement d'image avec des capteurs.le mec travaillé avec des images pgm: format d'image non comp
Lire les propriétés d'un fichier JPG [ par LucChirac ]
Lorsque je prends une photo avec mon numérique, l'appareil insère dans le fichier des informations comme la longueur de la focale, la vitesse d'obtura
algo JPG->BMP [ par MoDDiB ]
Il n'y aurais pas un site qu'y explikerait l'algo pour transformer un jpg en bmp?? ca sré sympataoche de me dire ou ^^merci !(les sources du concours
|
Derniers Blogs
[WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|