Compartir a través de


mapas de bits de Device-Independent

Un mapa de bits independiente del dispositivo (DIB) contiene una tabla de colores . Una tabla de colores describe cómo se corresponden los valores de píxeles con valores de color RGB, que describen los colores producidos por la emisión de luz. Por lo tanto, una DIB puede lograr la combinación de colores adecuada en cualquier dispositivo. Un DIB contiene la siguiente información de color y dimensión:

  • Formato de color del dispositivo en el que se creó la imagen rectangular.
  • Resolución del dispositivo en el que se creó la imagen rectangular.
  • Paleta del dispositivo en el que se creó la imagen.
  • Matriz de bits que asigna los tripletes rojo, verde, azul ( RGB ) a píxeles de la imagen rectangular.
  • Identificador de compresión de datos que indica el esquema de compresión de datos (si existe) usado para reducir el tamaño de la matriz de bits.

La información de color y dimensión se almacena en una estructura de BITMAPINFO, que consta de una estructura de BITMAPINFOHEADER seguida de dos o más estructuras RGBQUAD. La estructura BITMAPINFOHEADER especifica las dimensiones del rectángulo de píxeles, describe la tecnología de color del dispositivo e identifica los esquemas de compresión usados para reducir el tamaño del mapa de bits. Las estructuras RGBQUAD identifican los colores que aparecen en el rectángulo de píxeles.

Hay dos variedades de DIB:

  • Un DIB de abajo arriba, en el que el origen se encuentra en la esquina inferior izquierda.
  • Un DIB de arriba abajo, en el que el origen se encuentra en la esquina superior izquierda.

Si el alto de un DIB, como se indica en el Height miembro de la estructura de encabezado de información del mapa de bits, es un valor positivo, es una DIB de abajo arriba; si el alto es un valor negativo, es un DIB de arriba abajo. Los DIB de arriba abajo no se pueden comprimir.

El formato de color se especifica en términos de recuento de planos de color y bits de color. El recuento de planos de color es siempre 1; el recuento de bits de color es 1 para mapas de bits monocromáticos, 4 para mapas de bits VGA y 8, 16, 24 o 32 para mapas de bits en otros dispositivos de color. Una aplicación recupera el número de bits de color que usa una pantalla determinada (o impresora) llamando a la función GetDeviceCaps, especificando BITSPIXEL como segundo argumento.

La resolución de un dispositivo de visualización se especifica en píxeles por medidor. Una aplicación puede recuperar la resolución horizontal de una pantalla de vídeo o impresora siguiendo este proceso de tres pasos.

  1. Llame a la función GetDeviceCaps, especificando HORZRES como segundo argumento.
  2. Llame a GetDeviceCaps una segunda vez, especificando HORZSIZE como segundo argumento.
  3. Divida el primer valor devuelto por el segundo valor devuelto.

La aplicación puede recuperar la resolución vertical mediante el mismo proceso de tres pasos con parámetros diferentes: VERTRES en lugar de HORZRES y VERTSIZE en lugar de HORZSIZE.

La paleta se representa mediante una matriz de RGBQUAD estructuras que especifican los componentes de intensidad rojo, verde y azul para cada color de la paleta de colores de un dispositivo de visualización. Cada índice de color de la matriz de paletas se asigna a un píxel específico de la región rectangular asociada al mapa de bits. El tamaño de esta matriz, en bits, equivale al ancho del rectángulo, en píxeles, multiplicado por el alto del rectángulo, en píxeles, multiplicado por el recuento de bits de color para el dispositivo. Una aplicación puede recuperar el tamaño de la paleta del dispositivo llamando a la función GetDeviceCaps, especificando NUMCOLORS como segundo argumento.

Windows admite la compresión de la matriz de paletas para DIB de 8 bpp y 4-bpp de abajo arriba. Estas matrices se pueden comprimir mediante el esquema de codificación de longitud de ejecución (RLE). El esquema RLE usa valores de 2 bytes, el primer byte que especifica el número de píxeles consecutivos que usan un índice de color y el segundo byte que especifica el índice. Para obtener más información sobre la compresión de mapa de bits, vea la descripción de las estructuras de BITMAPINFOHEADER, BITMAPFILEHEADER, BITMAPV4HEADERy BITMAPV5HEADER.

Una aplicación puede crear un DIB a partir de un DDB inicializando las estructuras necesarias y llamando a la función GetDIBits. Para determinar si un dispositivo admite esta función, llame a la función GetDeviceCaps, especificando RC_DI_BITMAP como la marca RASTERCAPS.

Una aplicación que necesita copiar un mapa de bits puede usar TransparentBlt para copiar todos los píxeles de un mapa de bits de origen en un mapa de bits de destino, excepto los píxeles que coinciden con el color transparente.

Una aplicación puede usar un DIB para establecer píxeles en el dispositivo de visualización llamando a la función SetDIBitsToDevic e o StretchDIBits. Para determinar si un dispositivo admite la función SetDIBitsToDevice, llame a la función GetDeviceCaps y especifique RC_DIBTODEV como marca RASTERCAPS. Especifique RC_STRETCHDIB como marca RASTERCAPS para determinar si el dispositivo admite StretchDIBits.

Una aplicación que simplemente necesita mostrar una DIB preexistente puede usar la función SetDIBitsToDevice. Por ejemplo, una aplicación de hoja de cálculo puede abrir gráficos existentes y mostrarlos en una ventana mediante la función SetDIBitsToDevice. Sin embargo, para volver a dibujar repetidamente un mapa de bits en una ventana, la aplicación debe usar la función BitBlt. Por ejemplo, una aplicación multimedia que combina gráficos animados con sonido se beneficiaría de llamar a la función BitBlt porque se ejecuta más rápido que SetDIBitsToDevice.