Anuncios Google

OSLib - Módulo Image II

Tutoriales Avanzados Homebrewes

Nivel Medio

Hoy, aprenderemos un valioso módulo de programación, un módulo que puede ser realmente útil a la hora de hacer aplicaciones como shells, y demás. En este módulo aprenderemos todo lo relacionado sobre el Módulo Image a un nivel medio. Las imágenes que usaremos no os las daré yo, ya que las crearemos con OSLib. Forma parte de éste tutorial el uso de imágenes creadas a traves de OSLib.

Autor: Dioni0396.

Procedimiento:

Creando una imagen:

Seguramente os interese saber como crear una imagen, util por si queremos crear un editor de imagenes.

oslCreateImage(Ancho, Alto, Localizacion, Formato); //Bien, en los dos primeros argumentos simplemente ponemos el ancho y el alto. 
//No se recomienda pasar de 512x512 a la hora de cargar y/o mostrar imagenes, ya que podrian hacer crash. Esto tambien se aplica a imagenes normales.
//El tercer argumento indica la localizacion, podemos ponerlo o en OSL_IN_RAM o en OSL_IN_VRAM, esta ultima solo tiene 4MB de memoria, pero su calidad de imagen es completa
//Esta regla de localizacion tambien se aplica a imagenes normales.
//Y en el ultimo argumento indicamos el formato, tenemos 32 bits, 16,12,8,4,2
/*
OSL_PF_5551 	16 bits, 1 capa alfa
OSL_PF_4444 	12 bits, 4 capas alfas
OSL_PF_8888 	32 bits, 8 capas alfas
OSL_PF_4BIT 	4 bits (16 colors), Sin alfa
OSL_PF_8BIT 	8 bits (256 colors), Sin alfa
En este cuadro tenemos todos los formatos, y esta regla tambien se aplica a la carga normal de imagenes
*/

Ejemplo:

//Cargamos las lineas del principio, etc.
OSL_IMAGE *MiImagen;
int main(){
	oslInit(0);
	oslInitGfx(OSL_PF_8888,1);
	MiImagen = oslCreateImage(60,60,OSL_IN_RAM,OSL_PF_8888);
	while(!osl_quit){
		//Cargo lineas de inicio de dibujo
		oslDrawImage(MiImagen);
		oslEndDrawing();
		oslSyncFrame();
	}
	oslEndGfx();
	oslQuit();
	return 0;
}

Eliminando imagenes:

Ahora nos interesa borrarla porque ocupa mucha ram, o incluso hemos cargado una imagen con mucho color y vemos que la psp se ralentiza, pues como esta funcion eliminaremos la imagen.

oslDeleteImage(MiImagen);
//Cuidado, si despues de borrarla, le decims al programa que la vuelva a mostrar habra un crash.

Reseteando el Sprite:

Normalmente, en un RPG cuando un sprite deja de funcionar ya sea porque a muerto, o porque es asi la historia, no vamos a seguir teniendo la imagen cargada y ocupando ram. Por eso este argumento resetea el tilesize.

oslResetImageTile(MiSprite);

Ejemplo:

if(PersonajeMuerto==1){
	oslResetImageTile(MiSprite);
	oslDeleteImage(MiSprite);
}

Averiguando el Ancho y el Alto de una imagen:

oslGetImageWidth(MiImagen); //Devolvera un numero con el ancho de la imagen
oslGetImageHeight(MiImagen); //Devolvera un numero con el alto de la imagen

Convirtiendo imagenes de formato:

oslConvertImageTo(imagen, nueva_localizacion, nuevo_formato);//En esta funcion, convertimos una imagen de X bits a otra de Y Bits.
//El primer argumento indica la imagen, el segundo la localizacion (OSL_IN_RAM  o  OSL_IN_VRAM)
//El tercero el formato, para cambiarlo, si tenemos una de 32 bits y queremos reducirla pues ponermos OSL_PF_5551 para 16 bits
//Ejemplo:
MiImagen = oslConvertImageTo(MiImagen, OSL_IN_RAM, OSL_PF_5551);

Copiando imagenes:

oslCreateImageCopy(Imagen, nueva_localizacion); //Este argumento creara una copia exacta de la imagen. El primer argumento dice que imagen a copiar y el segundo la localizacion
//Ejemplo:
Imagen_dst = oslCreateImageCopy(Imagen_src,OSL_IN_RAM);

Moviendo imagenes:

oslMoveImageTo(Imagen,localizacion); //Movera la imagen a una nueva localizacion

Limpiando imagenes:

oslClearImage(img,color) //Rellenara de color una imagen, util a la hora de CREAR imagenes y querer colorearlas.

Detectando el color de un pixel:

oslGetImagePixel(img,x,y); //Esta funcion nos devuelve el color de ese pixel, en formato hexadecimal (0x00000)
//Ejemplo:
if(oslGetImagePixel(MiImagen,10,10)==0xff0000ff) Funcion();

Cambiando el color un pixel:

oslSetImagePixel(img,x,y,color_en_hexadecimal);
//Cambiara un pixel de color, el formato de color debe ser HEXADECIMAL

Recordad que casi toda la funciones necesitan haber sido cargadas anteriormente mediante el puntero OSL_IMAGE. Si os interesa saber mas de este modulo o saber las funciones detalladas a lo profesional, id a ésta pagina.

Hasta la próxima entrega.

4.125
Tu voto: Ninguno Votos totales: 4.1 (48 votos)

Anuncios Google

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de carlossg

Excelente, me encanta tu

Excelente, me encanta tu trabajo,voy a apartar a lua y a empezar en C.

Por casualidad no sabrías como cargar archivos 3d¿no?

Imagen de Dioni0396

No,

no se cargar modelos 3D aun.

Imagen de User170294

¡Felicidades Dioni! Está muy

¡Felicidades Dioni! Está muy bien explicado ;)

Imagen de Dioni0396

Gracias ^^

Gracias.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.