Compartir a través de


Device-Independent Bitmaps

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 los valores de color RGB , que describen los colores que se generan emitiendo luz. Por lo tanto, una DIB puede lograr la combinación de colores adecuada en cualquier dispositivo. Una 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 triplets 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) utilizado para reducir el tamaño de la matriz de bits.

La información de color y dimensión se almacena en una estructura BITMAPINFO , que consta de una estructura 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.
  • Una DIB de arriba abajo, en la que el origen se encuentra en la esquina superior izquierda.

Si el alto de un DIB, como indica el miembro Height 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 una DIB de arriba abajo. Las 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) mediante una llamada a la función GetDeviceCaps , especificando BITSPIXEL como segundo argumento.

La resolución de un dispositivo de pantalla 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 y especifique HORZRES como segundo argumento.
  2. Llame a GetDeviceCaps una segunda vez y especifique 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 estructuras RGBQUAD que especifican los componentes de intensidad rojo, verde y azul para cada color de la paleta de colores de un dispositivo de pantalla. 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, es equivalente 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 del 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 BITMAPINFOHEADER, BITMAPFILEHEADER, BITMAPV4HEADER y BITMAPV5HEADER .

Una aplicación puede crear una DIB a partir de una 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 y especifique RC_DI_BITMAP como 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 SetDIBitsToDevice 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 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.