Asuntos Oficiales > Retos
Formato Bmp
Geo:
--- Cita de: "Danielo" --- No entiendo la diferencia entre ncolours e importantcolours. Hice un programita de prueba que despliega en pantalla todos los datos del bmp y me sale todo coherente (al menos para mi) hasta:
xresolution=0;
yresolution=0;
ncolours=0;
importantcolours=0;
:blink: ¿eso está bien?... yo pensaba que ncolours almacenaba la cantidad de colores que tiene el bmp, pero como me sale 0 parecería que es otra cosa.
... ¿y que son los importantcolours?... ¿colores importantes?... ¿está bien que sea 0?
Análoga duda con xresolution e yresolution :(
--- Fin de la cita ---
El primero da el número de colores presentes en el mapa de bits cuando este es de menos de 24 bits, y, para el tipo de mapa de bits que estamos manejando efectivamente es 0.
El otro indica el número de colores (o el númeor de índices de colores) que son importantes para mostrar el mapa de bits, cuando todos son importantes este campo vale 0.
JuanK, también me gustaría que me comentaran al respecto sobre ese código :D.
--- Código: Text --- ancho = (ancho + 3) & ~3; */ alineado en 4 bytes*/bitsize = ancho * alto_imagen
Saludos,
JJ (Geo).
Enko:
--- Citar ---ancho = (ancho + 3) & ~3;
--- Fin de la cita ---
--- Citar ---ancho := (ancho + 3) and not 3;
--- Fin de la cita ---
Esto devuelve un numero multiplo de 4 menor a X. Es decir:
Multiplo de 4 < X
--- Código: Text --- result := X and not 3; Por eso es ancho + 3, para que al devolver el menor, sea en realidad el acho + los bytes extra.
es como sacar el resto pero m'as rapido.
aunque todavia no logro entender los de AND NOT, tendria que ser como + -, es decir, al final el numero de entrada ser'ia el mismo que el de la salida. :rolleyes:
JuanK:
--- Cita de: "Enko" ---
--- Citar ---ancho = (ancho + 3) & ~3;
--- Fin de la cita ---
--- Citar ---ancho := (ancho + 3) and not 3;
--- Fin de la cita ---
Esto devuelve un numero multiplo de 4 menor a X. Es decir:
Multiplo de 4 < X
--- Código: Text --- result := X and not 3; Por eso es ancho + 3, para que al devolver el menor, sea en realidad el acho + los bytes extra.
es como sacar el resto pero m'as rapido.
aunque todavia no logro entender los de AND NOT, tendria que ser como + -, es decir, al final el numero de entrada ser'ia el mismo que el de la salida. :rolleyes:
--- Fin de la cita ---
Hasta ahi creo que hemos entendido todos... pero aun queda la gran duda de:
como demonios :devil: se deduce eso :scream: :question:
JuanK:
--- Cita de: "Danielo" --- Estoy en el módulo Dibujo y tengo algunas dudas con la información del cabezal del archivo bmp:
--- Código: Text ---typedef struct { unsigned int size; /* Header size in bytes */ int width,height; /* Width and height of image */ unsigned short int planes; /* Number of colour planes */ unsigned short int bits; /* Bits per pixel */ unsigned int compression; /* Compression type */ unsigned int imagesize; /* Image size in bytes */ int xresolution,yresolution; /* Pixels per meter */ unsigned int ncolours; /* Number of colours */ unsigned int importantcolours; /* Important colours */} INFOHEADER; No entiendo la diferencia entre ncolours e importantcolours. Hice un programita de prueba que despliega en pantalla todos los datos del bmp y me sale todo coherente (al menos para mi) hasta:
xresolution=0;
yresolution=0;
ncolours=0;
importantcolours=0;
:blink: ¿eso está bien?... yo pensaba que ncolours almacenaba la cantidad de colores que tiene el bmp, pero como me sale 0 parecería que es otra cosa.
... ¿y que son los importantcolours?... ¿colores importantes?... ¿está bien que sea 0?
Análoga duda con xresolution e yresolution :(
--- Fin de la cita ---
Bueno debi extenderme un poco mas:
--- Código: Text ---int xresolution,yresolution; /* Pixels per meter */ Esta informacion se usa en algunos casos para los aplicativos profesionaloes de diseño grafico ya que en pantalla el mapa de biste puede tener unas caracteristicas pero al momento de la impresion su tamaño debe ser diferente, asi que etsas dos se usan para determinar cuantos pixeles deben haber por cada metro al momento de imprimir. AQctualmente deben estar casi en desuso porque los aplicativos de diseño generalmente requieren cosas aun mas complejas y para ello usan suis propios formatos.
--- Citar ---unsigned int ncolours; /* Number of colours */
--- Fin de la cita ---
Aunque al parecer es pura infromacion, creo que este campo se usa en los casos que no es color de 24 bit ni 16 bit, mejor dicho se usa en los casos que se usa la paleta, asi que el numero de colores que aparecen en este campo son el numero de colores representados por la paleta incluida en el bmp
--- Citar ---unsigned int importantcolours; /* Important colours
--- Fin de la cita ---
No se, supongo que informacion nada mas.
Nagisa:
Hola!!
--- Citar ---
--- Código: Text --- ancho = (ancho + 3) & ~3; */ alineado en 4 bytes*/
--- Fin de la cita ---
La deduccion no es tan sencilla...
Para verlo, trabajando en base 10 es mas facil.
Digamos que quieres hacer que un numero sea multiplo de 100. Tienes tres opciones para redondearlo:
a ) Por defecto: Lo que se haria es forzar los dos ultimos digitos a cero.
b ) Al mas proximo: Sumas la mitad de la precision que quieres dar, y fuerzas los dos ultimos digitos a cero. En este caso, se sumaria 50. Sabes que para los menores de 49 se te queda en la centena anterior (por que subes como mucho a 99), y el resto se te pasan a la siguiente centena. Esto se suele usar mucho en aritmetica de coma flotante...
c ) Por exceso: El usado aqui. Es similar al anterior, solo que en lugar de sumar 50 se sumarian 99. Asi haces que todos suban a la centena superior salvo en el caso de que ya sea multiplo de 100.
Pues lo mismo, pero en base 2 y buscando multiplos de 4. Sumas tres, y con el AND fuerzas que los dos ultimos bytes sean cero (not 3 == 0xFFFFFFFC).
Espero haberme explicado... Yo por lo menos fue asi como lo vi.
Saludos!!
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa