Obtener numero graficos en un fpg

Started by warrior_rockk, April 18, 2016, 09:58:39 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

warrior_rockk

Por como está estructurado el formato interno de un fpg, no se conoce el numero de gráficos que hay en un fpg ya que, tras la cabecera, se leen secuencialmente los pixeles. Con lo cual, ¿no hay modo de saber desde Bennu cuantas imágenes tiene un fpg? ¿Como lo hacéis si tenéis que mostrar una lista de graficos de un fpg para un editor o para algún conversor que recorra los graficos de un fpg?

AmakaSt

#1
Un fpg después de la cabecera, en el caso de un fpg de 16 y 32 bits, lo que le sigue es el código del grafico (posición dentro del fpg) y en un fpg de 8 bits después de la cabecera le sigue la paleta de colores y a continuación el código del grafico.

Un saludo.

Pd: Esto lo escribí hace ya un tiempo respondiendo a Erkosone en el foro de DivGO:
Quote

Así empecé yo, con este código:

        var a        = new XMLHttpRequest(),
            datos     = [],
            info    = '';
   
        a.open('GET', 'miarchivo.fpg', true);
        a.responseType = 'arraybuffer';
       
        a.onload = function(){
            if (this.readyState == 4 && this.status == 200) {
                datos = new Uint8Array(this.response);
               
                for (var i = 0, l = datos.length; i < l; i++){
                    info += datos[i] + ', ';
                }
               
                document.body.innerHTML = info;
            }
        }
       
        a.send();



Con esto podrás leer y guardar la información que hay en un archivo en un array donde cada elemento del array tendrá un valor del 0 al 255. En este código que te paso lo escribe en el body del html para poder inspeccionarlo.

El resultado que debería darte sería algo así desde el principio: 102, 51, 50, 26, 13, 10, 0, 0, 1, 0, 0, 0, 64, 220, 5, 0, 66, 97, 110, 110, 101, 114, 95, 78, 101, 117, 114, 111, 99, 105, 101, 110, 99, 105, 97, 45, 101, 109, 97, 103, 105, 115, 116, 101, 114, 45, 49, 54, 66, 97, 110, 110, 101, 114, 95, 78, 101, 117, 114, 111, 160, 0, 0, 0, 88, 2, 0, 0, 0, 0, 0, 0, 255, 255, 255,... (y muchísimo mas dependiendo la cantidad de imágenes dentro del archivo)

En el resultado que he escrito arriba, los primeros 8 elementos: '102,51,50,26,13,10,0,0', es una cabecera o identificador del archivo.
Luego le sigue el código del grafico: '1, 0'... continuaría con una descripción y a partir de la posición 60 del array estaría el ancho y alto del grafico con: '160, 0, 0, 0, 88, 2, 0, 0'; el grafico tendría de ancho 160px [160, 0, 0, 0] y de alto 600px [88, 2, 0, 0]. El cálculo del alto en este caso es el valor del primer elemento sumado a 256 por el valor del segundo: 88 + (256 * 2).
Lo siguiente seria los puntos de control que en este no hay: '0, 0, 0, 0' y luego seguiría la información rgba de la imagen.

Luego es repetir esto para la siguiente imagen...

SplinterGU

Quote from: warrior_rockk on April 18, 2016, 09:58:39 AM
Por como está estructurado el formato interno de un fpg, no se conoce el numero de gráficos que hay en un fpg ya que, tras la cabecera, se leen secuencialmente los pixeles. Con lo cual, ¿no hay modo de saber desde Bennu cuantas imágenes tiene un fpg? ¿Como lo hacéis si tenéis que mostrar una lista de graficos de un fpg para un editor o para algún conversor que recorra los graficos de un fpg?

desde bennugd, tenes que hacer un for de 1 a 999, y contar... usando MAP_EXISTS( fpg, graph )
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

warrior_rockk

Quote from: SplinterGU on April 18, 2016, 02:05:33 PM
Quote from: warrior_rockk on April 18, 2016, 09:58:39 AM
Por como está estructurado el formato interno de un fpg, no se conoce el numero de gráficos que hay en un fpg ya que, tras la cabecera, se leen secuencialmente los pixeles. Con lo cual, ¿no hay modo de saber desde Bennu cuantas imágenes tiene un fpg? ¿Como lo hacéis si tenéis que mostrar una lista de graficos de un fpg para un editor o para algún conversor que recorra los graficos de un fpg?

desde bennugd, tenes que hacer un for de 1 a 999, y contar... usando MAP_EXISTS( fpg, graph )


Map_Exists! Eso es lo que necesitaba. Muchas gracias!!

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2