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.
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.
Comentarios
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?
No,
no se cargar modelos 3D aun.
¡Felicidades Dioni! Está muy
¡Felicidades Dioni! Está muy bien explicado ;)
Gracias ^^
Gracias.