Charger un bitmap dans un screensaver [Résolu]

Signaler
Messages postés
71
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
21 octobre 2007
-
Messages postés
71
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
21 octobre 2007
-
bonjour
est-ce qu'il est possible de charger un bitmap dans un screensaver autrement que de le mettre dans le fichier ressources

j'ai essayé ca ,mais ca ne charge pas


#include <windows.h>
#include <stdio.h>
#include "classTextureBmp.h"


TextureBitmap::TextureBitmap()
{
}


TextureBitmap::~TextureBitmap()
{
}


void TextureBitmap::Init(HINSTANCE hInst)
{
glEnable(GL_TEXTURE_2D);
LoadTexture("PHOTOS//photo1.bmp",hInst,1);
LoadTexture("PHOTOS//photo2.bmp",hInst,2);
LoadTexture("PHOTOS//photo3.bmp",hInst,3);
LoadTexture("PHOTOS//photo4.bmp",hInst,4);
LoadTexture("PHOTOS//photo5.bmp",hInst,5);
LoadTexture("PHOTOS//photo6.bmp",hInst,6);
}


unsigned char* TextureBitmap::inverseRGB(unsigned char* data, long nbre, int type)
{
long i=0;
int index;
unsigned char temp;
while (i<nbre-1)
{
index=i*(type/8);
temp=data[index];
data[index]=data[index+2];
data[index+2]=temp;
i++;
}
data[nbre]=0;
return data;
}


bool TextureBitmap::LoadTexture(LPTSTR szFileName, HINSTANCE hInst,GLuint texture )
{
HBITMAP hBMP;
BITMAP BMP;
unsigned char* pData;
long nData;
glGenTextures(1, &texture_name);
hBMP=(HBITMAP)LoadImage(hInst, szFileName, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION );


if (!hBMP)
return FALSE;


GetObject(hBMP, sizeof(BMP), &BMP);

pData=(unsigned char*)BMP.bmBits;
nData=BMP.bmWidth*BMP.bmHeight;
pData[nData]=0;

pData=inverseRGB(pData,nData,BMP.bmBitsPixel);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

glBindTexture(GL_TEXTURE_2D,texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

gluBuild2DMipmaps(GL_TEXTURE_2D, 3,BMP.bmWidth,BMP.bmHeight,
GL_RGB, GL_UNSIGNED_BYTE,pData);

DeleteObject(hBMP);


return TRUE;
}

dans main.cpp:
LRESULT MsgCreate(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
....................code opengl ect....
Images.Init(hInst);
}
merci d'avance

25 réponses

Messages postés
71
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
21 octobre 2007

merci super chef (vecchio56) ca marche impec

hBMP=(HBITMAP)LoadImage(hInst, szFileName, IMAGE_BITMAP, 0, 0 ,
LR_LOADFROMFILE | LR_DEFAULTSIZE | LR_CREATEDIBSECTION);
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Je comprend pas ce qui se passe avec LoadImage. Ca fait deux personnes qui ont le même problème...
Si tu veux que je regarde, tu peux m'envoyer un mp et je te dirai ou m'envoyer ton projet
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Pour lire un fichier externe, tu dois modifier ton LoadImage:

LoadImage(hInst, szFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_DEFAULTSIZE);
Messages postés
71
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
21 octobre 2007

merci vecchio56
mais avec LoadImage(hInst, szFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_DEFAULTSIZE);
j'ai un rapport d'erreur microsoft
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
C'est très certainement dans le code qui figure après le LoadBitmap qu'il y a un problème
Tu est sur que ta fonction inverseRGB est correcte?
Messages postés
71
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
21 octobre 2007

je sais pas trop pour inverseRGB
mais entre temps j'ai essayé ca
hBMP=(HBITMAP)LoadImage(hInst, szFileName, IMAGE_BITMAP,
BMP.bmWidth,BMP.bmHeight , LR_LOADFROMFILE | LR_DEFAULTSIZE);
les bitmaps s'affiche pas ,mais j'ai plus de rapport d'erreur
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Et que renvoie LoadImage dans les deux cas?
Messages postés
71
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
21 octobre 2007

ha oui aussi
si je met les bitmaps dans le fichier ressources(.rc) comme ceci:
A BITMAP "PHOTOS//photo1.bmp"
B BITMAP "PHOTOS//photo2.bmp"
C BITMAP "PHOTOS//photo3.bmp"
E BITMAP "PHOTOS//photo4.bmp"
D BITMAP "PHOTOS//photo5.bmp"
F BITMAP "PHOTOS//photo6.bmp"
ca marche mais il se retrouve dans l'exe on ne peut plus les changer
donc si ca fonctionne comme ca ,bin pour le inverseRGB il doit etre bonje crois??
Messages postés
71
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
21 octobre 2007

excuse moi j'en suis qu'un débutant
que veut tu dire par que renvoie LoadImage dans les deux cas?
pour info je compile avec dev-cpp,et ce code je n'arrive pas à le debugger en mettant un point d'arret
pourtant je l'ai déja fait avec d'autre code
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Je voulais dire que vaut la valeur retournée par LoadImage (hBMP)
Effectivement si ca marche avec les mêmes bitmaps en ressource c'est que le code doit être bon...
Quand tu as ton erreur, a quel endroit survient-elle?
Messages postés
71
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
21 octobre 2007

l'erreur dont je parle c'est un message d'erreur de windows et non pas sur le compilateur.
mais maintenant je ne l'ai plus après avoir modifier loadimage comme ceci:
hBMP=(HBITMAP)LoadImage(hInst, szFileName, IMAGE_BITMAP,
BMP.bmWidth,BMP.bmHeight , LR_LOADFROMFILE | LR_DEFAULTSIZE);
mon screensaver fonctionne ,mais sans afficher les bitmaps
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Je sais que c'est une erreur d'exécution, mais elle arrive bien à un moment donné, donc essaie de trouver a quel endroit (si tu as un debugger c'est facile, sinon tu peux faire avec des MessageBox)
Messages postés
71
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
21 octobre 2007

j'ai essayé ca
hBMP=(HBITMAP)LoadImage(hInst, szFileName, IMAGE_BITMAP,
BMP.bmWidth,BMP.bmHeight , LR_LOADFROMFILE | LR_DEFAULTSIZE);
if (hBMP==NULL)
{
MessageBox(NULL,"Image pas chargée","debug",MB_ICONSTOP|MB_OK);
}
les bitmaps ne se chargent pas
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Dans ce cas regarde pour quelle raison le chargement à échoué (voir GetLastError et FormatMessage).
L'image se charge-t-elle si tu mets les params 4 et 5 à 0?
szFileName contient il bien le nom du fichier?
Messages postés
71
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
21 octobre 2007

pourtant le code de chargement de bitmap est bon puisqu'il fonctionne quand les bitmaps sont en ressources.
je me demande si c'est possible de les charger de l'extérieur pour un screensaver?

de plus tout les codes et tutos que j'ai vu sur le site cpp france sur les screensavers ,les images a charger sont sur le fichier ressource,alors est-ce possible le chargement extérieur

ca doit etre possible ,parce que dans le choix des screensavers de windows xp il y en a 1"mon album photo" il reprend toutes les photos qu'il y a sur mon pc et en jpeg en plus.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Bien sur que c'est possible de charger une bitmap extérieure
Mais est-ce que szFileName contient bien le chemin complet de l'image?
Messages postés
71
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
21 octobre 2007

y a pas moyen d'utiliser le debbugger sur dev-cpp j'ai essayé des break points un peu partout dans le code et à chaque fois la boite de dialogue s'affiche donc pas de point d'arrêt sur le code
pourtant sur d'autre code de ma création j'ai pu le faire
c'est dommage j'aurai pu voir ce qui passe par szFileName

les GetLastError et FormatMessage je ne sait pas trop comment m' y prendre excuse moi

en tout cas merci de tes réponses jusqu'à présent
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Pour voir ce que contient szFileName, tu a juste a faire un MessageBox
Messages postés
71
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
21 octobre 2007

comme ca
if (szFileName==NULL)
{
MessageBox(NULL,"Image pas chargée","debug",MB_ICONSTOP|MB_OK);
}
dev-cpp m'indique: Permission denied
ld returned 1 exit status
Makefile.win [Build Error] [VEILLEBATMAN60.scr] Error 1
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
MessageBox(NULL,szFileName,szFileName,MB_ICONSTOP|MB_OK);

Ton erreur de ld, c'est sans doute que ton programme est en cours d'exécution derrière :)
1 2