Discussion: oslLoadPalette
Afficher un message
Vieux 23/12/2006, 20h00   #1
Casa150
Membre
 
Date d'inscription: 16/09/2006
Localisation: Les Lilas
Messages: 8
Par défaut oslLoadPalette

Salut.

J'ai un probleme avec la fonction oslLoadPalette !!

Quand je l'utilise aucune image apparait à l'écran.
J'explique mon but : je veux pouvoir charger une image puis selectionner une palette (ici c'est changer la couleur de la tenue de vegeta).


En gros je sais pas utiliser cette fonction. Aidez moi pleaseee...

Voila mon code :
Code:
#include <oslib/oslib.h>

PSP_MODULE_INFO("Palette",0,1,1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);

OSL_IMAGE *loadSprite(char *filename, short pixelFormat, short emplacement);

unsigned long palette[16] = {
	RGB(18, 22, 122), RGB(12, 35, 171), RGB(173, 123, 4), RGB(154, 132, 106),
	RGB(20, 53, 196), RGB(39, 83, 215), RGB(83, 131, 239), RGB(201, 201, 201),
	RGB(222, 181, 8), RGB(222, 156, 82), RGB(231, 173, 115), RGB(255, 0, 255),
	RGB(255, 218, 98), RGB(245, 215, 150), RGB(239, 239, 239), RGB(255, 255, 255)
};

int main(int argc, char* argv[]) {
	oslInit(0);
	oslInitGfx(OSL_PF_8888, 1);
	oslInitConsole();
	oslInitAudio();
	
	
	OSL_IMAGE *img = loadSprite( "vegeta.png", OSL_PF_8BIT, OSL_IN_VRAM);
	if ( !img)
		oslFatalError("vegeta.png incorrect !!");
	
	img->palette = oslLoadPalette( (unsigned long *)palette, 16, OSL_PF_8888);
	
	img->x = 100;
	img->y = 100;
	
	int i;
	OSL_CONTROLLER *pad;
	
	while ( !osl_quit ) {
		oslStartDrawing();
		oslClearScreen(RGB(250,250,250));
		
		oslDrawImage( img);
		
		pad = oslReadKeys();
		if(pad->pressed.cross) { // pour voir si il y a un changement a l'ecran
			for( i = 0; i < 16; i++) {
				palette[i] += 5;
			}
			oslPrintf_xy(0,0,"++");
			img->palette = oslLoadPalette( (unsigned long *)palette, 16, OSL_PF_5650);
		}
		
		oslEndDrawing();
		oslSyncFrame();
		oslAudioVSync();
	} //fin while
	
	oslDeleteImage(img);
	
	oslEndGfx();
	oslQuit();
	return 0;
}

OSL_IMAGE *loadSprite(char *filename, short pixelFormat, short emplacement) {
	OSL_IMAGE *temp, *img = NULL;
	//Load & swizzle for best speed
	
	temp = oslLoadImageFile(filename, OSL_IN_RAM, pixelFormat);
	if (temp) {
		img = oslCreateSwizzledImage(temp, emplacement);
		oslDeleteImage(temp);
	}

	return temp;
}
Casa150 est déconnecté   Réponse avec citation