begin process at 2012 02 12 19:00:44
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > AFFICHAGE D'IMAGES JPG AVEC IPICTURE EN C

AFFICHAGE D'IMAGES JPG AVEC IPICTURE EN C


 Information sur la source

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Graphique Classé sous :ipicture, com, jpg, c Niveau :Débutant Date de création :05/07/2007 Vu / téléchargé :8 562 / 627

Auteur : racpp

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

 Description

Cliquez pour voir la capture en taille normale
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;
}


 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


 Sources du même auteur

Source avec Zip Source avec une capture SOUS-CLASSEMENT DE FENÊTRE D'UN AUTRE PROCESS PAR INJECTION ...
Source avec Zip Source avec une capture FENÊTRE FLOTTANTE SANS FOCUS (WIN32 API)
Source avec Zip Source avec une capture SERVICE WINDOWS DANS UNE DLL LANCÉ PAR SVCHOST.EXE
Source avec Zip Source avec une capture IMPRESSION EN WIN32 API AVEC OPTIONS
Source avec Zip Source avec une capture INFOTIP SHELL EXTENSION (BULLE DE L'EXPLORATEUR WINDOWS) (WI...

 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 Source avec une capture [C/WIN32/WMI]SAVOIR SI UNE CLASSE COM EST INSTALLÉE par rt15
Source avec Zip SOLO OLELOADPICTURE par f_l_a_s_h_b_a_c_k
Source avec Zip Source avec une capture [WIN32][C][DEV-C++] IMPSCREEN IMPRIME ECRAN PAR HOOK SANS DL... par omnia
Source avec Zip QUICKSEE 1.0 par f_l_a_s_h_b_a_c_k
Source avec Zip CODE DE HUFFMAN par Ricky_MacElroy

Commentaires et avis

Commentaire de racpp le 05/07/2007 01:16:22 administrateur CS

J'ai oublié de préciser que le fichier image doit figurer dans le même dossier que l'exécutable. Ce dernier doit être renommé en AfficheJPG.exe

Commentaire de omnia le 07/05/2008 15:40:14

Salut,

j'essais de compiler ta source sous dev-cpp et sa ne fonctionne pas :

j'ai déja ajouter les libs
-lole32    // pour CoInitialize(0); et CoUninitialize();
-loleaut32 // pour OleLoadPicturePath

et
#define IID_IPicture               "{7BF80980-BF32-101A-8BBB-00AA00300CAB}"

mais le reste quand ca compile sa plante :p

tu as déja fait des tests sur dev-cpp ?

Commentaire de racpp le 09/05/2008 00:04:55 administrateur CS

Salut,
Je n'ai pas fait de tests sur Dev-cpp car je l'ai plus depuis que j'ai découvert qu'il souffre de beaucoup de lacunes. Essaie de passer en mode Debug pour repérer la ligne qui cause le plantage.

Commentaire de omnia le 09/05/2008 09:14:48

SAlut en fait c'est l'utilisation de Ipicture qui pose problèmesà partir de la fonction OleLoadPicturePath, je n'ai pas trouvé de correspondance.

j pense que je vais aussi être obligé d'utiliser VS de toutes :) po grave fonctionne très bien sous VS en tout cas.

 Ajouter un commentaire


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


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 0,780 sec (3)

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