FPG Editor v 4.0

Started by DCelso, September 14, 2012, 11:08:22 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

DCelso

ya lo tienes.
Si necesitas mas info o no entiendes el log dímelo.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

master

Quote from: DCelso on February 21, 2013, 11:36:36 AM
Gracias, oye, que inglés mas bueno tienes, jueu lo entiendo igualito, igualito al español ;)

;D Jejeje, creí que se vería mejor mi español al ingles de Google Translate.

En la r24 parece que en la version de linux el unico problema es que no me genera bien las letras a tamaños pequeños (de 20 hacia abajo), en la version de windows no hay este problema

FreeYourMind

gracias!

me ha servido para comprobar que realmente si tenia los valores bien, o sea, el problema parece estar al convertir el array en bitmap usando funciones de c#.

El formato que se guarda en el array es realmente bitmap ? tendré que ver mejor el tema de la conversion.

Otra cosa que te confirmo, guardas mal el valor de graph_size, como puedes ver en la imagen, tiene valor 982 y deberia tener valor 918 que es la multiplicacion:

FPG_images[FPG_add_pos].Width * FPG_images[FPG_add_pos].Height * byte_size = 17 * 27 * 2 = 918


si miramos la posicion de la imagen empieza en 72 y termina en 989, tambien se confirma, o sea 990 - 72 = 918

con lo cual el size deberia poner 918 y no 982 para la imagen del test, aunque esto no afecte el funcionamiento, y parece ser que en bennugd tampoco.



DCelso

Esta bien. Graph size no es el tamaño del array de pixeles. Si no el total del grafico con su info incluida. 990-8 = 982.
Al decirmelo la otra vez lo mire y lo vi bien. Al decidmelo esta vez ya vi tu fallo.
Me estrañó que dijeras eso la otra vez. Ahora veo el por qué.

En respuesta a si es un bitmap el array pues tampoco. E array es lo que es. La informacion de color de cada pixek. Y guarda exactamente el color pixek por pixel. Y dependiendo del formato fpg usa un byte o mas por cada pixel.
Tampoco corresponde a la forma en que lo guarda un bitmap en todas las profundidades. Solo es igual en 32 y 24 bits. Gracias a splintergu. Porque para 16 fenix usa RGB y cdiv BGR. Y en 8 bits las paletad div las disminuye a seis bits por componente. Y en un bit hace redondeo a byte por libea. En definitiva.  Casi nada que ver con bitmap.

Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

FreeYourMind

ya pero tu lo conviertes al final en imagen usando result.LoadFromIntfImage(lazBMP); ? cierto ? el tema es que tengo que buscar una forma de pasarlo a bitmap al final para poder pintar las imagenes en los controles del form, y al reves al guardar un fpg...

DCelso

Si. Pero lo hago manualmente. Es el objetivo de la funcion loaddatabitmar. Creo un bitmap de 32 bits le doy las dimensiones leidas en la onfo del bitmT y dependiendo del tipo de fpg leo el array de pixeles de una forma u otra y pinto cada pixel del bitmap. Por lo que si creias que directamente lo asignaba magicamente al bitmap. No era asi. Es un proceso artesano macerado con el paso de las versiones. :)
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

FreeYourMind

Buenas noticias, el bicho del monte empieza siendo capturado xDDD



De momento ya sale algo identificable como imagen xD y ya la considera imagen que es lo mejor, te pongo el src de c# para ver si me ayudas a buscar lo que falta, he tenido que usar una llamada distinta al crear el bitmap, usando puntero y variable stride, la forma de calcular el valor de stride lo he visto por internet.

Esto es al final de obtener el array p_bytearray, donde ya solo falta pasarla a bitmap para poder mostarla en pantalla:
int bitsPerPixel = ((int)PixelFormat.Format32bppArgb & 0xff00) >> 8;
int bytesPerPixel = (bitsPerPixel + 7) / 8;
int stride = 4 * ((width * bytesPerPixel + 3) / 4);
System.Runtime.InteropServices.
GCHandle pinnedArray = System.Runtime.InteropServices.GCHandle.Alloc(p_bytearray, System.Runtime.InteropServices.GCHandleType.Pinned);
IntPtr pointer = pinnedArray.AddrOfPinnedObject();
result =
newBitmap(width / 2, height, stride, PixelFormat.Format32bppArgb, pointer); 

El problema que tengo es que los colores no salen bien y sólo tengo 3 opciones de formato de pixel para 32 bits:
Format32bppArgb Format32bppPArgb Format32bppRgb

una de ellas pone el fondo negro, pero la imagen es la misma, tambien he puesto: newBitmap(width / 2... para corregir la imagen horizontalmente, que sino se repite.

 

DCelso

 :o. No entiendo nada de nadaa.
A ver. No hay una forma de crear un bitmat de 32 bits vacio ?
Y luego acceder pixel a pixel para ir cambiando el color?
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

FreeYourMind

vacio! eso es definirlo null, pero si es null no hay posiciones ni pixels a los que cambiar color... enfin esto es mas logico que lo de lazarus creando bitmaps con dimensiones y formatos antes de meter en ellos lo que sea xD

de todas formas yo creo y mirando tu codigo, hay muchas similitudes en el calculo del stride, tambien tiene en su formala width * bytes_per_pixel. yo creo que lo que esta fallando es tener este valor correcto y tambien el equivalente pixel format en c#

tampoco entiendo a que te refieres con cambiar color pixel a pixel, no es supuesto que la info de los pixels no esta ya en el array binario ? vamos, yo de este tema entiendo tanto como de mujeres, nada xDD

FreeYourMind

Bueno, te dejo mi ultima captura de las pruebas, tambien tengo otro error, ahora mismo sólo puedo cargar 69 imagenes de las 250 que tengo, parece que tengo problemas de aceso a memoria protegida en la variable height... pero eso ya es otro tema, primero quiero solucionar el pintado de las imagenes.




SplinterGU

un bitmap vacio = null? como es eso? flipo igual a DCelso...

entiendo que un bitmap vacio se refiere a un bitmap de tamano W x H, de 32bits con todos los pixels en 0.... eso entiendo se refiere DCelso... y por lo menos es lo que yo entiendo como un bitmap de 32bits vacio.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DCelso

Gracias splinter. Estamos en la misma onda.  ;)
free, a ver. Parece que distes con la tecls. Ahi se ven imagenes. Que es lo que falla en ellas?
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

FreeYourMind

vale, he visto que en c# tambien se puede crear vacio ya con formato, seria así :
Bitmap b2 = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

vale, mañana probaré ser mas fiel al codigo de pascal y rellenar el bmp de la misma forma a ver si funciona de una vez.

DCelso

Guais, eso va viento en popa entonces:D.

bueno, si intentas sincronizar tu código con el último de svn del mío, lo vas a flipar, he cambiado un montón de ficheros :'(, pero lo hice para convertir la libreria ufpg en una clase como dios manda, hasta ahora era un conjunto de estructuras y funciones, con ello se simplifica un poco la lógica, se organiza un poco el código y se rompe la dependencia de unas cuantas variables globales.

También, y por el mismo motivo, me ví obligado a crear un nuevo componente extendido de listview con soporte para fpgs.

Con este cambio, me dí cuenta de algún que otro error garrafal que existen desde tiempos inmemoriables y que cuando los he visto he flipado pensando que cómo podría ir esto hasta ahora. :D, (me refiero a algunos límites, superiores e inferiores, en los bucles).
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

DCelso

Binarios windows r26 subidos.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/