begin process at 2013 05 22 11:28:31
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

OpenGL

 > INFOS IMAGE POUR OPENGL

INFOS IMAGE POUR OPENGL


 Information sur la source

Note :
Aucune note
Catégorie :OpenGL Classé sous :Image, DevIl, Win, OpenGl Niveau :Initié Date de création :11/07/2012 Vu / téléchargé :1 664 / 34

Auteur : nikau

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

 Description

Cliquez pour voir la capture en taille normale
Ce programme donne toutes les informations nécessaires concernant une image afin de pouvoir la charger avec OpenGL au travers de fonctions comme glDrawPixels(), glTexImage2D(), ect...
Les informations données sont : L’extension, la largeur, la hauteur, le format des données, le type des données, la taille des données.

J'ai réalisé ce code en C++, avec l'API Win32, et la bibliothèque DevIl.

Je l'ai fait pour moi à la base afin de me simplifier le travail et de rendre le code plus performant en n'ayant pas besoin d'utiliser  DevIl pour toutes ces infos mais seulement pour les données de l'image.

Je donne un exemple de code ci dessous :

Source

  • #include "Window.h"
  • #include "logs.h"
  • #include "Ressources.h"
  • #include <sstream>
  • namespace img{
  • cWindow* cWindow::mStaticWindow = NULL;
  • cWindow::cWindow()
  • {
  • mHinstance = NULL;
  • mHwnd = NULL;
  • mHdc = NULL;
  • mHmenu1 = NULL;
  • mHmenu11 = NULL;
  • mHmenu22 = NULL;
  • mTitle = "";
  • mClassName = "WndClass";
  • mWndStyle = WS_SYSMENU | WS_VISIBLE;
  • mPosx = 0;
  • mPosy = 0;
  • mWidth = 0;
  • mHeight = 0;
  • mFileName = "";
  • mStaticWindow = this;
  • }
  • cWindow::~cWindow()
  • {
  • }
  • bool cWindow::CreateWndClass()
  • {
  • WNDCLASSEX wndClass = {0};
  • wndClass.cbSize = sizeof(WNDCLASSEX);
  • wndClass.style = CS_HREDRAW | CS_VREDRAW;
  • wndClass.lpfnWndProc = StaticWndProc;
  • wndClass.cbClsExtra = 0;
  • wndClass.cbWndExtra = 0;
  • wndClass.hInstance = mHinstance;
  • wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION /*MAKEINTRESOURCE(IDI_GAME_ENGINE_2D)*/);
  • wndClass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
  • wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
  • wndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 12);
  • wndClass.lpszMenuName = NULL;
  • wndClass.lpszClassName = mClassName.c_str();
  • if(!RegisterClassEx(&wndClass))
  • {
  • log::ErrorMessage("Failed create window class!");
  • return false;
  • }
  • return true;
  • }
  • bool cWindow::CreateNewMenu()
  • {
  • mHmenu22 = CreateMenu();
  • if(!mHmenu22){
  • log::ErrorMessage("Error mHmenu22");
  • return false;}
  • AppendMenu(mHmenu22, MF_STRING, IDM_ABOUT, "A propos de Infos Images");
  • mHmenu11 = CreateMenu();
  • if(!mHmenu11){
  • log::ErrorMessage("Error mHmenu11");
  • return false;}
  • AppendMenu(mHmenu11, MF_STRING, IDM_OPEN, "Ouvrir...");
  • AppendMenu(mHmenu11, MF_SEPARATOR, 0, NULL);
  • AppendMenu(mHmenu11, MF_STRING, IDM_QUIT, "Quitter");
  • mHmenu1 = CreateMenu();
  • if(!mHmenu1){
  • log::ErrorMessage("Error mHmenu1");
  • return false;}
  • AppendMenu(mHmenu1, MF_POPUP, (UINT)mHmenu11, "Fichier");
  • AppendMenu(mHmenu1, MF_POPUP, (UINT)mHmenu22, "?");
  • return true;
  • }
  • bool cWindow::CreateNewWindow(HINSTANCE hinstance, std::string title, int posx, int posy, int width, int height)
  • {
  • mHinstance = hinstance;
  • mPosx = posx;
  • mPosy = posy;
  • mWidth = width;
  • mHeight = height;
  • mTitle = title;
  • if(!this->CreateWndClass())
  • return false;
  • if(!this->CreateNewMenu())
  • return false;
  • mHwnd = CreateWindowEx(NULL, mClassName.c_str(), mTitle.c_str(), mWndStyle,mPosx, mPosy,
  • mWidth, mHeight, HWND_DESKTOP, mHmenu1, mHinstance, NULL);
  • if(!mHwnd)
  • {
  • log::ErrorMessage("Failed to create window!");
  • return false;
  • }
  • ShowWindow(mHwnd, SW_SHOW);
  • UpdateWindow(mHwnd);
  • this->DisplayInformations();
  • this->MainLoop();
  • return true;
  • }
  • void cWindow::MainLoop()
  • {
  • while(GetMessage(&mMsg, NULL, 0, 0))
  • {
  • TranslateMessage(&mMsg);
  • DispatchMessage(&mMsg);
  • }
  • ReleaseDC(mHwnd, mHdc);
  • }
  • void cWindow::DisplayInformations()
  • {
  • PAINTSTRUCT ps;
  • mHdc = BeginPaint(mHwnd, &ps);
  • HFONT hfont;
  • LOGFONT logfont;
  • ZeroMemory(&logfont, sizeof(LOGFONT));
  • lstrcpy(logfont.lfFaceName, "Courier New");
  • logfont.lfHeight = 15;
  • hfont = CreateFontIndirect(&logfont);
  • SelectObject(mHdc, hfont);
  • SetBkMode(mHdc, TRANSPARENT);
  • TextOut(mHdc, 10, 10, GetName().c_str(), GetName().size());
  • TextOut(mHdc, 10, 40, "Extension", 9);
  • TextOut(mHdc, 150, 40, GetFileType().c_str(), GetFileType().size());
  • TextOut(mHdc, 10, 60, "Largeure", 8);
  • TextOut(mHdc, 150, 60, cImageInfos::GetWidth().c_str(), cImageInfos::GetWidth().size());
  • TextOut(mHdc, 10, 80, "Hauteur", 7);
  • TextOut(mHdc, 150, 80, cImageInfos::GetHeight().c_str(), cImageInfos::GetHeight().size());
  • TextOut(mHdc, 10, 100, "Format Des Données", 18);
  • TextOut(mHdc, 150, 100, GetDataFormat().c_str(), GetDataFormat().size());
  • TextOut(mHdc, 10, 120, "Type Des Données", 16);
  • TextOut(mHdc, 150, 120, GetDataType().c_str(), GetDataType().size());
  • TextOut(mHdc, 10, 140, "Taille Des Données", 18);
  • TextOut(mHdc, 150, 140, GetDataSize().c_str(), GetDataSize().size());
  • DeleteObject(hfont);
  • EndPaint(mHwnd, &ps);
  • ReleaseDC(mHwnd, mHdc);
  • }
  • LRESULT CALLBACK cWindow::StaticWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
  • {
  • return mStaticWindow->WndProc(hwnd, msg, wParam, lParam);
  • }
  • LRESULT CALLBACK cWindow::WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
  • {
  • switch(msg)
  • {
  • case WM_CREATE:
  • break;
  • case WM_PAINT:
  • this->DisplayInformations();
  • break;
  • case WM_KEYDOWN:
  • switch(wParam)
  • {
  • case VK_ESCAPE:
  • PostQuitMessage(0);
  • break;
  • }
  • break;
  • case WM_COMMAND:
  • if(LOWORD(wParam) == IDM_QUIT)
  • PostMessage(mHwnd, WM_DESTROY, 0, 0);
  • if(LOWORD(wParam) == IDM_OPEN)
  • {
  • mFileName = this->DialogBoxOpenFileName();
  • if(mFileName != "none")
  • {
  • LoadNewImage(mFileName);
  • InvalidateRect(mHwnd, NULL, true);
  • }
  • }
  • if(LOWORD(wParam) == IDM_ABOUT)
  • DialogBox(mHinstance, "DIALOGBOXABOUT", mHwnd, (DLGPROC)DialogBoxAboutProc);
  • break;
  • case WM_CLOSE:
  • case WM_QUIT:
  • case WM_DESTROY:
  • PostQuitMessage(0);
  • break;
  • default:
  • return DefWindowProc(hwnd, msg, wParam, lParam);
  • }
  • return 0;
  • }
  • bool APIENTRY cWindow::DialogBoxAboutProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
  • {
  • switch(msg)
  • {
  • case WM_INITDIALOG:
  • return true;
  • case WM_COMMAND:
  • if(LOWORD(wParam) == IDOK)
  • {
  • EndDialog(hwnd, 0);
  • return true;
  • }
  • default:
  • return false;
  • }
  • return false;
  • }
  • std::string cWindow::DialogBoxOpenFileName()
  • {
  • OPENFILENAME ofn = {0};
  • CHAR file[MAX_PATH] = {0};
  • ofn.lStructSize = sizeof(OPENFILENAME);
  • ofn.hwndOwner = mHwnd;
  • ofn.lpstrFile = file;
  • ofn.nMaxFile = MAX_PATH;
  • ofn.nFilterIndex = 1;
  • ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
  • if(GetOpenFileName(&ofn))
  • return file;
  • std::string none = "none";
  • return none;
  • }
  • } // namespace img
#include "Window.h"
#include "logs.h"
#include "Ressources.h"

#include <sstream>

namespace img{

cWindow* cWindow::mStaticWindow = NULL;

cWindow::cWindow()
{
	mHinstance = NULL;
	mHwnd = NULL;
	mHdc = NULL;
	mHmenu1 = NULL;
	mHmenu11 = NULL;
	mHmenu22 = NULL;
	mTitle = "";
	mClassName = "WndClass";
        mWndStyle = WS_SYSMENU | WS_VISIBLE;

	mPosx = 0;
	mPosy = 0;
	mWidth = 0;
	mHeight = 0;
    
	mFileName = "";
	mStaticWindow = this;
}


cWindow::~cWindow()
{

}


bool cWindow::CreateWndClass()
{

	WNDCLASSEX wndClass = {0};

    wndClass.cbSize = sizeof(WNDCLASSEX);
    wndClass.style = CS_HREDRAW | CS_VREDRAW;
    wndClass.lpfnWndProc = StaticWndProc;
    wndClass.cbClsExtra = 0;
    wndClass.cbWndExtra = 0;
    wndClass.hInstance = mHinstance;
    wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION /*MAKEINTRESOURCE(IDI_GAME_ENGINE_2D)*/);
    wndClass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    wndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW + 12);
    wndClass.lpszMenuName = NULL;
    wndClass.lpszClassName = mClassName.c_str();
  
  if(!RegisterClassEx(&wndClass))
  {
	  log::ErrorMessage("Failed create window class!");
	  return false;
  }

  return true;
}


bool cWindow::CreateNewMenu()
{
	mHmenu22 = CreateMenu();
	if(!mHmenu22){
		log::ErrorMessage("Error mHmenu22");
		return false;}
	AppendMenu(mHmenu22, MF_STRING, IDM_ABOUT, "A propos de Infos Images");
   
	mHmenu11 = CreateMenu();
	if(!mHmenu11){
		log::ErrorMessage("Error mHmenu11");
		return false;}
        AppendMenu(mHmenu11, MF_STRING, IDM_OPEN, "Ouvrir...");
	AppendMenu(mHmenu11, MF_SEPARATOR, 0, NULL);
	AppendMenu(mHmenu11, MF_STRING, IDM_QUIT, "Quitter");

	mHmenu1 = CreateMenu();
	if(!mHmenu1){
		log::ErrorMessage("Error mHmenu1");
		return false;}
	AppendMenu(mHmenu1, MF_POPUP, (UINT)mHmenu11, "Fichier");
	AppendMenu(mHmenu1, MF_POPUP, (UINT)mHmenu22, "?");
	return true;
}


bool cWindow::CreateNewWindow(HINSTANCE hinstance, std::string title, int posx, int posy, int width, int height)
{
    mHinstance = hinstance;

	mPosx = posx;
	mPosy = posy;
	mWidth = width;
	mHeight = height;
	mTitle = title;

   if(!this->CreateWndClass())
		return false;

   if(!this->CreateNewMenu())
	   return false;

	mHwnd = CreateWindowEx(NULL, mClassName.c_str(), mTitle.c_str(), mWndStyle,mPosx, mPosy, 
			                  mWidth, mHeight, HWND_DESKTOP, mHmenu1, mHinstance, NULL);

    if(!mHwnd)
	{
		log::ErrorMessage("Failed to create window!");
		return false;
	}

    ShowWindow(mHwnd, SW_SHOW); 
    UpdateWindow(mHwnd);

	this->DisplayInformations();
	this->MainLoop();

	return true; 
}


void cWindow::MainLoop()
{

	while(GetMessage(&mMsg, NULL, 0, 0))
    {
        TranslateMessage(&mMsg);
        DispatchMessage(&mMsg);
	}

    ReleaseDC(mHwnd, mHdc);
}


void cWindow::DisplayInformations()
{
	PAINTSTRUCT ps;
	mHdc = BeginPaint(mHwnd, &ps);

	HFONT hfont;
	LOGFONT logfont;

	ZeroMemory(&logfont, sizeof(LOGFONT));
	lstrcpy(logfont.lfFaceName, "Courier New");
	logfont.lfHeight = 15;
	hfont = CreateFontIndirect(&logfont);
        SelectObject(mHdc, hfont);


        SetBkMode(mHdc, TRANSPARENT);
    
	TextOut(mHdc, 10, 10, GetName().c_str(), GetName().size()); 
	TextOut(mHdc, 10, 40, "Extension", 9);
	TextOut(mHdc, 150, 40, GetFileType().c_str(), GetFileType().size());
	TextOut(mHdc, 10, 60, "Largeure", 8);
	TextOut(mHdc, 150, 60, cImageInfos::GetWidth().c_str(), cImageInfos::GetWidth().size());
	TextOut(mHdc, 10, 80, "Hauteur", 7);
	TextOut(mHdc, 150, 80, cImageInfos::GetHeight().c_str(), cImageInfos::GetHeight().size());
	TextOut(mHdc, 10, 100, "Format Des Données", 18);
	TextOut(mHdc, 150, 100, GetDataFormat().c_str(), GetDataFormat().size());
	TextOut(mHdc, 10, 120, "Type Des Données", 16);
	TextOut(mHdc, 150, 120, GetDataType().c_str(), GetDataType().size());
	TextOut(mHdc, 10, 140, "Taille Des Données", 18);
	TextOut(mHdc, 150, 140, GetDataSize().c_str(), GetDataSize().size());    
	DeleteObject(hfont);
	EndPaint(mHwnd, &ps);
	ReleaseDC(mHwnd, mHdc);
	
 
}

LRESULT CALLBACK cWindow::StaticWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	return mStaticWindow->WndProc(hwnd, msg, wParam, lParam);
}

LRESULT CALLBACK cWindow::WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	switch(msg)
	{
	    case WM_CREATE:
			break;

		case WM_PAINT:
			this->DisplayInformations();
			break;

	    case WM_KEYDOWN:
			switch(wParam)
		    {
		        case VK_ESCAPE:
		        PostQuitMessage(0);
				break;
		    }
		    break;


		case WM_COMMAND:
			if(LOWORD(wParam) == IDM_QUIT)
				PostMessage(mHwnd, WM_DESTROY, 0, 0);

            if(LOWORD(wParam) == IDM_OPEN)
			{
				mFileName = this->DialogBoxOpenFileName();
				if(mFileName != "none")
				{
				    LoadNewImage(mFileName);
				    InvalidateRect(mHwnd, NULL, true);
				}
			}

 			if(LOWORD(wParam) == IDM_ABOUT)
				DialogBox(mHinstance, "DIALOGBOXABOUT", mHwnd, (DLGPROC)DialogBoxAboutProc);

			break;

	    case WM_CLOSE:
	    case WM_QUIT:
	    case WM_DESTROY:
			PostQuitMessage(0); 
		    break;

	
	      default:
	      return DefWindowProc(hwnd, msg, wParam, lParam);
	}

	return 0;
}

bool APIENTRY cWindow::DialogBoxAboutProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	switch(msg)
	{
	    case WM_INITDIALOG:
		    return true;

	    case WM_COMMAND:
			if(LOWORD(wParam) == IDOK)
			{
				EndDialog(hwnd, 0);
			    return true;
			}

		default:
			return false;
		
	}
	return false;

}


std::string cWindow::DialogBoxOpenFileName()
{
	OPENFILENAME ofn = {0};
	CHAR file[MAX_PATH] = {0};

	ofn.lStructSize = sizeof(OPENFILENAME);
	ofn.hwndOwner = mHwnd;
	ofn.lpstrFile = file;
	ofn.nMaxFile = MAX_PATH;
	ofn.nFilterIndex = 1;
	ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;

	if(GetOpenFileName(&ofn))
		return file;
    
	std::string none = "none";
	return none;
}

} // namespace img 



 Conclusion

Donnez moi votre avis.

 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 [C++] [WIN32] JEUX DE SHOOT ( SPACE SHOOT )

 Sources de la même categorie

Source avec Zip AMÉLIORATION DE BOIDS : SIMULATION DE VOLS D'OISEAUX par frappfrapp
Source avec Zip Source avec une capture BOIDS : SIMULATION DE VOLS D'OISEAUX par valchek
OBJECTMARKER par Kekettetm
Source avec Zip Source avec une capture AFFICHER DES COURBES DE BEZIER par shorzy
Source avec Zip Source avec une capture BASE/MOTEUR 3D EN QT/OPENGL (COMPLET ET FONCTIONNEL!) POUR U... par envi33

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture COMPARAISON DE QUATRE MÉTHODES OPENGL POUR AFFICHER UN OBJET... par pgl10
Source avec Zip Source avec une capture POUR DÉPLACER DES OBJETS 3D DANS UNE SCÈNE WINDOWS 3D par pgl10
Source avec Zip STÉGANOGRAPHIE BITMAP par litdouilletdu85
Source avec Zip AMÉLIORATION DE BOIDS : SIMULATION DE VOLS D'OISEAUX par frappfrapp
Source avec Zip LECTEUR VIDEO OPENGL (SON ET IMAGE) AVEC LA LIB VFW par delfare

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Photoshop avec OpenGl [ par iznogoud ] Bonjour, Je suis incapable d'afficher une image BMP lorsqu'elle est fabriquer avec photoshop.Ex je met seulement un fond bleu RGB 0,0,255et mon progra filtrer une scene opengl [ par methos69 ] bonjour,je dois antialiaser des polygon sous opengl v1.1 (et pas une autre)sans utiliser des extensions récentes ( 2 ans minimum) propre aux cartes gr Opengl et DevIL [ par xarier ] Hi everybody ma questipon est la suivante: comment faire ca avec devil [ pour le dernier parametre ]glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]- Opengl glut debutant menu graphique [ par gravel ] Bonjour, j'aimerais savoir comment on fais en opengl/glut pour faire afichier un image fixe. Je veux dire que si j'ai un screen en 800x600 et que j'm' TRAITEMENT D'IMAGE [ par Batman60 ] salut je cherche le moyen d'ajouter &#224; une image des parties color&#233;es ou transparentes exemple sur une image 1024X800&nbsp;&nbsp;&nbsp;&nbsp; Lire une video sous opengl [ par kenjimax ] Bonjour à tous !Est ce que quelqu'un connait une librairie (a l'image de fmod pour le son) capable de lire des videos et compatible openGL ?Je demande Pixel Perfect [ par T_Mehdi ] salut a tous bon je suis entrain de realiser un moteur de jeu 2D complet et optimiz&#233; donc j'avait vollue inclure le teste de collision entre deux [Opengl] afficher image 1er plan [ par goutbouyo ] Salut,Je voudrais afficher une image en 1er plan avec opengl, comme ce que vous voyez quand vous regardez cette page ou encore comme votre bureau sous Texte texturé transparent en opengl [ par filap ] Salut a tous, j'ai un petit probleme (sinon je serais pas la me direz vous ^^)J'ai cr&#233;&#233; un afficheur de texte en opengl, un de ceux qui pren Mémorisation de l'image à l'écran avec openGL [ par vincemail ] Bonsoir &#224; tous,Je fais un jeu en OpenGL et je voudrais faire un menu qui s'affiche lorsqu'on appuie sur la touche echap. Cependant, je veux garde


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
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 : 4,040 sec (3)

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