Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: killgates en 23 de Enero de 2016, 05:14:44 PM

Título: especificación de ficheros
Publicado por: killgates en 23 de Enero de 2016, 05:14:44 PM
Hola,

Ando buscando información en internet sobre la estructura interna para ficheros targa, la cual necesito para un programa de opengl. Y no encuentro nada concreto.
Mi intención es entender como leer este fichero, para extraer los datos y su indormación de cabezera.

Gracias
Título: Re:especificación de ficheros
Publicado por: [EX3] en 23 de Enero de 2016, 06:48:30 PM
Buscar "tga format specification" en Google:
https://www.google.es/search?q=tga+format&oq=TGA+f&aqs=chrome.2.69i57j0l5.3192j0j7&sourceid=chrome&es_sm=122&ie=UTF-8#q=tga+format+specification (https://www.google.es/search?q=tga+format&oq=TGA+f&aqs=chrome.2.69i57j0l5.3192j0j7&sourceid=chrome&es_sm=122&ie=UTF-8#q=tga+format+specification)

No te lo tomes a mal, pero da la sensación que ni te has molestado en buscar un poco en Google, por que TGA no es precisamente un formato nuevo ni poco documentado.

Salu2...
Título: Re:especificación de ficheros
Publicado por: Gallo en 25 de Enero de 2016, 09:51:54 AM
Yo hace poco he implementado un loader / writter para ficheros TGA, es de los formatos mas simples que hay, casi todo se puede encontrar en stackoverflow, aquí tienes un buen ejemplo:

http://stackoverflow.com/questions/20595340/loading-a-tga-bmp-file-in-c-opengl

Básicamente has de leer el header campo a campo (en el ejemplo lo hacen de golpe pero no haciendo fread de una estrucutra que seria la tentación, si no usando un array de bytes, ya que con la struct el compilador añadiria padding) siguiendo la especificación y hay una serie de campos que te dirán la cantidad de datos que encontrarás después del header generalmente será: width * height * (bitCount / 8), luego te basas en esos mismos valores para pasarlo a OpenGL, el width y el height está claro,  (bitCount / 8) te dice la cantidad de componentes, si es 1 es que es una imágen de un solo canal, utilizado para mascaras por ejemplo, seria un GL_RED, si es 3 GL_RGB, si es 4, GL_RGBA, en realidad serán BGR y BGRA, pero yo por ejemplo lo convierto a RGBA siempre. Ese ejemplo además prevée TGAs comprimidos.