Charger un bitmap dans un screensaver

Résolu
cs_Batman60 Messages postés 71 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 21 octobre 2007 - 17 avril 2006 à 09:19
cs_Batman60 Messages postés 71 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 21 octobre 2007 - 17 avril 2006 à 19:02
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

cs_Batman60 Messages postés 71 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 21 octobre 2007
17 avril 2006 à 19:02
merci super chef (vecchio56) ca marche impec

hBMP=(HBITMAP)LoadImage(hInst, szFileName, IMAGE_BITMAP, 0, 0 ,
LR_LOADFROMFILE | LR_DEFAULTSIZE | LR_CREATEDIBSECTION);
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 avril 2006 à 15:03
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
1
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 avril 2006 à 10:37
Pour lire un fichier externe, tu dois modifier ton LoadImage:

LoadImage(hInst, szFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_DEFAULTSIZE);
0
cs_Batman60 Messages postés 71 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 21 octobre 2007
17 avril 2006 à 11:16
merci vecchio56
mais avec LoadImage(hInst, szFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_DEFAULTSIZE);
j'ai un rapport d'erreur microsoft
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 avril 2006 à 11:20
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?
0
cs_Batman60 Messages postés 71 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 21 octobre 2007
17 avril 2006 à 11:24
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
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 avril 2006 à 11:29
Et que renvoie LoadImage dans les deux cas?
0
cs_Batman60 Messages postés 71 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 21 octobre 2007
17 avril 2006 à 11:32
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??
0
cs_Batman60 Messages postés 71 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 21 octobre 2007
17 avril 2006 à 11:38
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
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 avril 2006 à 11:43
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?
0
cs_Batman60 Messages postés 71 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 21 octobre 2007
17 avril 2006 à 11:51
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
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 avril 2006 à 11:55
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)
0
cs_Batman60 Messages postés 71 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 21 octobre 2007
17 avril 2006 à 12:06
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
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 avril 2006 à 12:08
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?
0
cs_Batman60 Messages postés 71 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 21 octobre 2007
17 avril 2006 à 13:01
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.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 avril 2006 à 13:18
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?
0
cs_Batman60 Messages postés 71 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 21 octobre 2007
17 avril 2006 à 13:42
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
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 avril 2006 à 13:45
Pour voir ce que contient szFileName, tu a juste a faire un MessageBox
0
cs_Batman60 Messages postés 71 Date d'inscription samedi 21 mai 2005 Statut Membre Dernière intervention 21 octobre 2007
17 avril 2006 à 13:58
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
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
17 avril 2006 à 14:04
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 :)
0
Rejoignez-nous