Accueil > > > INFOS IMAGE POUR OPENGL
INFOS IMAGE POUR OPENGL
Information sur la source
Description
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.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
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 à une image des parties colorées ou transparentes exemple sur une image 1024X800
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é 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éé un afficheur de texte en opengl, un de ceux qui pren
Mémorisation de l'image à l'écran avec openGL [ par vincemail ]
Bonsoir à 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
|
Derniers Blogs
VOTEZ POUR LE TOP 10 DES INFLUENCEURS SHAREPOINT FRANCOPHONES !VOTEZ POUR LE TOP 10 DES INFLUENCEURS SHAREPOINT FRANCOPHONES ! par Patrick Guimonet
Si ce n'est déjà fait (comme plus de 600 personnes déjà), il est encore temps de voter pour le concours TOP 10 des influenceurs SharePoint francophones ! Il est organisé par harmon.ie et accessible ici : http://harmon.ie/top-...
Cliquez pour lire la suite de l'article par Patrick Guimonet [CONF'SHAREPOINT] DERNIER RAPPEL ! :-)[CONF'SHAREPOINT] DERNIER RAPPEL ! :-) par Patrick Guimonet
La Conf'SharePoint en chiffres c'est : 3 jours de SharePoint ! 4 parcours et 60 sessions 17 partenaires représentant toutes les fac...
Cliquez pour lire la suite de l'article par Patrick Guimonet [ #SHAREPOINT 2013 ] LES MODèLES DE SITES STANDARDS.[ #SHAREPOINT 2013 ] LES MODèLES DE SITES STANDARDS. par Patrick Guimonet
C'est un point peu mis en avant mais SharePoint 2013 a été l'occasion de remettre de l'ordre dans les modèles de sites. Tout d'abord, un certain nombre de modèles ont été tout simplement rendus obsolètes (cf. Fonctionnalités déco...
Cliquez pour lire la suite de l'article par Patrick Guimonet 10 ERREURS DE COMPRéHENSION CONCERNANT SHAREPOINT.10 ERREURS DE COMPRéHENSION CONCERNANT SHAREPOINT. par Patrick Guimonet
Une excellente infographie (qui a sa source ici :http://www.evokeit.com/sharepoint-blog/misconceptions-of-microsoft-sharepoint) que j'ai traduite et commentée sur le blog d'Abalon : http://abalon.fr/blog/10-erreurs-de-comprhension-...
Cliquez pour lire la suite de l'article par Patrick Guimonet
Logiciels
Nego Facturation (1.84)NEGO FACTURATION (1.84)Nego Facturation est un logiciel complet qui permet de gérer vos factures et devis très simplemen... Cliquez pour télécharger Nego Facturation Revealer Keylogger Free (2.07)REVEALER KEYLOGGER FREE (2.07)Keylogger invisible et gratuit pour Windows 8, 7, Vista ou XP. Revealer Keylogger Free vous perme... Cliquez pour télécharger Revealer Keylogger Free Devis-Factures PHMSD (2.1.0.1)DEVIS-FACTURES PHMSD (2.1.0.1)Configuration minimale
Nécessite Windows™ 2000, XP, Windows 7, 8, Vista (Service Pack à... Cliquez pour télécharger Devis-Factures PHMSD Ludoprêt (3.2)LUDOPRêT (3.2)Logiciel gratuit de gestion de ludothèque.
Gestion des jeux et des adhérents.
Gestion des for... Cliquez pour télécharger Ludoprêt 974 Application Server (13.2.1.3)974 APPLICATION SERVER (13.2.1.3)Ecommerce, Blogueur, Vitrine, Newsletter, Java IDE, ..., in the cloud et sous haute dispo. Facile... Cliquez pour télécharger 974 Application Server
|