Ver la versión completa : guardar una variable SDL_Surface*
Sería posible guardar una variable SDL_Surface* en un fichero, estoy intentado guardar todos los parámetros de la estructura SDL_Surface esta a su vez contiene otras estructuras (SDL_PixelFormat->SDL_Palette->....) y no se que podría hacer para no tener que ir recorriendo una a una estas estructuras, ¿ hay alguna forma de hacerlo más sencillo?
:confused: :confused: :confused: :confused: :confused:
Gracias
^MiSaTo^
18/08/2007, 14:50
qué es lo que quieres hacer exactamente?
Pues guardandola como cualquier otra estructura, ¿o no te vale?
fwrite(superficie, 1, sizeof(SDL_Surface), handle);
anibarro
18/08/2007, 23:50
swapd0, hacer fwrite(&superficie,sizeof(SDL_Surface),1,handle) solo sirve para estructuras sin punteros. Si tienes punteros no te queda mas remedio que recorrer toda la estructura siguiendo los punteros, e ir guardando todo lo que encuentres.
De todas formas no parece que tenga mucho sentido guardarse, por ejemplo, el puntero "SDL_Surface->pixels", si probablemente esa direccion cambiara cuando cargues el SDL_Surface de un fichero. Lo mejor es guardarse los datos necesarios para poder crear otra SDL_Surface de la forma habitual creo yo
mi objetivo es que la imagen no esté rulando por alguna de las carpetas del proyecto y así evitar que si alguien me modifica la imagen me modifique el juego, en fin, para ocultar algo de información al usuario que valla a utilizar el juego, ese es mi objetivo
XD
^MiSaTo^
19/08/2007, 15:43
mi objetivo es que la imagen no esté rulando por alguna de las carpetas del proyecto y así evitar que si alguien me modifica la imagen me modifique el juego, en fin, para ocultar algo de información al usuario que valla a utilizar el juego, ese es mi objetivo
XD
Y por qué no la incluyes como .h?
no se como va eso :confused: :confused:
^MiSaTo^
19/08/2007, 16:08
La guardas en .h (mismamente con el gimp) y luego la usas con un #include imagen.h
conoces algún otro programa que también me lo pase a formato .h??, y una vez que lo tenga en este formato como puedo cargar la imagen en una variable SDL_Surface*????
Muchas gracias por todo
La guardas en .h (mismamente con el gimp) y luego la usas con un #include imagen.h
Si, pero el formato es distinto al que usa SDL. Se lo tendria que trabajar un poquito más.
al final probé a guardar la imagen con el gimp en .h, pero este fichero me ocupa unos 2mb, asi que creo que lo voy a dejar como está ya que el fichero .png me ocupa apenas unos kbyte
Claro que puedes, como una estructura normal en un fichero binario. Lo que buscas se denomina serialización
Lo que tienes que tener en cuenta es que la estructura tiene punteros, es decir, para cada puntero te tocará calcular el tamaño de los datos y copiarlo ( y lo mismo al recuperarlos, alojando la memoria a mano)
Sinceramente, vale más que serialices la imagen directamente en ficheros (no la superficie), la deserialies en memoria y luego la cargues en una superficie. RWops es lo que necesitas.
Si encima eso lo abstraes con un gestor de recursos, pues mejor ;)
http://www.kekkai.org/roger/sdl/rwops/rwops.html
al final probé a guardar la imagen con el gimp en .h, pero este fichero me ocupa unos 2mb, asi que creo que lo voy a dejar como está ya que el fichero .png me ocupa apenas unos kbyte
claro, esa es la mejor forma, lo que ocurre es que de esa forma las imagenes estan sin comprimir y cuando lo guardas en png esta comprimido y ocupa mucho menos.
De todas formas 2MB me parece muchisimo que tamaño tiene la imagen? y a cuantos colores?
Para ocultar la imagenes se me ocurre que te crees tu propio formato grafico, basado en png por ejemplo, es decir con la compresion de png pero cambiando las cabeceras (te las podrian modificar pero ya tendrian que molestarse en adivinar las cabeceras)
PD. Has pensado que modificarte las imagenes seria lo mejor que te podria pasar? mola mogollon que a la gente le guste tu juego y se haga sus propias versiones ;) por que digan que es suyo no te preocupes con que pongas en el ejecutable algun texto que diga quien es el autor ;)
Aiken
Ojito, que el png ocupa unos kbytes cuando la imagen está en el fichero. Al cargarla ocupa lo mismito que descomprimida (a no ser que tengas hardware que pueda trabajar directamente con imágenes comprimidas, que no creo)
La solución que te dí antes también sirve aquí, solo que en vez de serializar la imagen a pelo, la serializas en un .zip, y la descomprimes desde memoria.
Por supuesto si serializas directamente un fichero PNG o JPEG no es necesario, lo de comprimir tú mismo la imagen es para RAW
Ojito, que el png ocupa unos kbytes cuando la imagen está en el fichero. Al cargarla ocupa lo mismito que descomprimida (a no ser que tengas hardware que pueda trabajar directamente con imágenes comprimidas, que no creo)
La solución que te dí antes también sirve aquí, solo que en vez de serializar la imagen a pelo, la serializas en un .zip, y la descomprimes desde memoria.
Por supuesto si serializas directamente un fichero PNG o JPEG no es necesario, lo de comprimir tú mismo la imagen es para RAW
pero aun en raw, que pase de unos KB a 2MB? a no ser que cuando dice unos KB se refiera a 200KB :D
por eso le preguntaba la resolucion y la propundidad de color, porque el calculo de cuanto ocupa es bastante facil.
Y estando en el foro de GP32 espero que este trabajando a 256colores (a la pobre gp32 le cuesta mover graficos de mas colores), asi que 2MB me suena mucho.
Aiken
No me había parado a mirar los números, pero 2Megas para una imagen sin comprimir (un bitmap mísmamente)es un huevo.
Una captura de mi pantalla a 1280x1024, ocupa 5 megas en bitmap y porque lo guardo a 32 bits (que es totalmente innecesario en un formato que no soporta alpha), bajando a 1,5 megas con la mitad de resolución; así que no se qué tipo de imagen y a que profundidad de color la tendrá, pero si ocupa tanto o es muy grande o no es un formato para la Gp2x.
Cosa curiosa el PNG, he guardado dos imágenes iguales cambiando el tamaño en potochó. La de 1280x1024 ocupa 158Kb. La misma pero a 640x512 ocupa... 160Kb!!!
XD
No me había parado a mirar los números, pero 2Megas para una imagen sin comprimir (un bitmap mísmamente)es un huevo.
Una captura de mi pantalla a 1280x1024, ocupa 5 megas en bitmap y porque lo guardo a 32 bits (que es totalmente innecesario en un formato que no soporta alpha), bajando a 1,5 megas con la mitad de resolución; así que no se qué tipo de imagen y a que profundidad de color la tendrá, pero si ocupa tanto o es muy grande o no es un formato para la Gp2x.
Cosa curiosa el PNG, he guardado dos imágenes iguales cambiando el tamaño en potochó. La de 1280x1024 ocupa 158Kb. La misma pero a 640x512 ocupa... 160Kb!!!
XD
Porque PNG es un formato de imagenes con compresion sin perdida de calidad y el BMP no XD
En un bmp guardas en formato raw la información de color de todos los pixeles de la imagen, entonces a medida que crece el tamaño de la pantalla, el tamaño de la imagen aumenta cuadraticamente.
o no es un formato para la Gp2x.
eso es normal porque estamos en el foro de GP32, no en el de Gp2x :D
Aiken
Porque PNG es un formato de imagenes con compresion sin perdida de calidad y el BMP no XD
Ya lo se, de eso estamos hablando ;)
Lo que yo digo es que la imagen grande en PNG, ocupa MENOS que la pequeña en png :P y me parece curioso.
[QUOTE]eso es normal porque estamos en el foro de GP32, no en el de Gp2x [QUOTE]
Me se fue el dedo, y la cabeza :P
Pero vamos, que una imagen de 2Mb no puede ser muy buena ni para la gp32 ni para la gp2x :P
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions Inc. All rights reserved.