다음을 통해 공유


비트맵 Device-Independent

DIB(디바이스 독립적 비트맵)에는 색 테이블이 포함되어 있습니다. 색 표에서는 픽셀 값이 RGB 색 값에 해당하는 방식을 설명합니다. 이 색은 빛을 내보내서 생성되는 색을 설명합니다. 따라서 DIB는 모든 디바이스에서 적절한 색 구성표를 달성할 수 있습니다. DIB에는 다음과 같은 색 및 차원 정보가 포함됩니다.

  • 사각형 이미지를 만든 디바이스의 색 형식입니다.
  • 사각형 이미지를 만든 디바이스의 해상도입니다.
  • 이미지를 만든 디바이스의 색상표입니다.
  • 사각형 이미지의 픽셀에 빨강, 녹색, 파랑( RGB ) 삼중항을 매핑하는 비트 배열입니다.
  • 비트 배열의 크기를 줄이는 데 사용되는 데이터 압축 체계(있는 경우)를 나타내는 데이터 압축 식별자입니다.

색 및 차원 정보는 BITMAPINFO 구조체와 두 개 이상의 RGBQUAD 구조체로 구성된 BITMAPINFO 구조체에 저장됩니다. BITMAPINFOHEADER 구조체는 픽셀 사각형의 크기를 지정하고, 디바이스의 색 기술을 설명하고, 비트맵의 크기를 줄이는 데 사용되는 압축 체계를 식별합니다. RGBQUAD 구조체는 픽셀 사각형에 표시되는 색을 식별합니다.

DIB에는 두 가지 종류가 있습니다.

  • 원점이 왼쪽 아래 모서리에 있는 상향식 DIB입니다.
  • 원본이 왼쪽 위 모서리에 있는 하향식 DIB입니다.

비트맵 정보 헤더 구조의 Height 멤버가 나타내는 DIB 높이가 양수 값이면 상향식 DIB입니다. 높이가 음수 값이면 하향식 DIB입니다. 하향식 DIB는 압축할 수 없습니다.

색 형식은 색 평면 및 색 비트 수 측면에서 지정됩니다. 색 평면의 개수는 항상 1입니다. 색 비트 수는 단색 비트맵의 경우 1, VGA 비트맵의 경우 4, 다른 색 디바이스의 비트맵의 경우 8, 16, 24 또는 32입니다. 애플리케이션은 GetDeviceCaps 함수를 호출하고 BITSPIXEL을 두 번째 인수로 지정하여 특정 디스플레이(또는 프린터)에서 사용하는 색 비트 수를 검색합니다.

디스플레이 디바이스의 해상도는 미터당 픽셀 단위로 지정됩니다. 애플리케이션은 이 3단계 프로세스에 따라 비디오 디스플레이 또는 프린터의 가로 해상도를 검색할 수 있습니다.

  1. 두 번째 인수로 HORZRES를 지정하여 GetDeviceCaps 함수를 호출합니다.
  2. 두 번째 인수로 HORZSIZE를 지정하여 GetDeviceCaps 를 두 번째로 호출합니다.
  3. 첫 번째 반환 값을 두 번째 반환 값으로 나눕니다.

애플리케이션은 HORZRES 대신 VERTRES 및 HORZSIZE 대신 VERTSIZE 매개 변수가 있는 동일한 3단계 프로세스를 사용하여 수직 해상도를 검색할 수 있습니다.

색상표는 디스플레이 디바이스의 색상표에서 각 색에 대해 빨간색, 녹색 및 파란색 강도 구성 요소를 지정하는 RGBQUAD 구조체 배열로 표시됩니다. 색상표 배열의 각 색 인덱스가 비트맵과 연결된 사각형 영역의 특정 픽셀에 매핑됩니다. 이 배열의 크기(비트)는 직사각형의 너비(픽셀)와 같으며 직사각형 높이를 픽셀 단위로 곱하고 디바이스의 색 비트 수를 곱합니다. 애플리케이션은 GetDeviceCaps 함수를 호출하고 NUMCOLORS를 두 번째 인수로 지정하여 디바이스 팔레트의 크기를 검색할 수 있습니다.

Windows는 8bpp 및 4bpp 상향식 DIB에 대한 팔레트 배열의 압축을 지원합니다. 이러한 배열은 RLE(실행 길이 인코딩) 체계를 사용하여 압축할 수 있습니다. RLE 체계는 2 바이트 값, 색 인덱스를 사용하는 연속 픽셀 수를 지정하는 첫 번째 바이트 및 인덱스를 지정하는 두 번째 바이트를 사용합니다. 비트맵 압축에 대한 자세한 내용은 BITMAPINFOHEADER, BITMAPFILEHEADER, BITMAPV4HEADERBITMAPV5HEADER 구조체에 대한 설명을 참조하세요.

애플리케이션은 필요한 구조를 초기화하고 GetDIBits 함수를 호출하여 DDB에서 DIB를 만들 수 있습니다. 디바이스가 이 함수를 지원하는지 여부를 확인하려면 GetDeviceCaps 함수를 호출하고 RC_DI_BITMAP RASTERCAPS 플래그로 지정합니다.

비트맵을 복사해야 하는 애플리케이션은 TransparentBlt 를 사용하여 원본 비트맵의 모든 픽셀을 투명 색과 일치하는 픽셀을 제외한 대상 비트맵에 복사할 수 있습니다.

애플리케이션은 SetDIBitsToDevice 또는 StretchDIBits 함수를 호출하여 DIB를 사용하여 디스플레이 디바이스에서 픽셀을 설정할 수 있습니다 . 디바이스가 SetDIBitsToDevice 함수를 지원하는지 여부를 확인하려면 GetDeviceCaps 함수를 호출하고 RC_DIBTODEV RASTERCAPS 플래그로 지정합니다. RC_STRETCHDIB RASTERCAPS 플래그로 지정하여 디바이스가 StretchDIBits를 지원하는지 확인합니다.

기존 DIB를 표시하기만 하면 되는 애플리케이션은 SetDIBitsToDevice 함수를 사용할 수 있습니다. 예를 들어 스프레드시트 애플리케이션은 SetDIBitsToDevice 함수를 사용하여 기존 차트를 열고 창에 표시할 수 있습니다. 그러나 창에서 비트맵을 반복적으로 다시 그리려면 애플리케이션에서 BitBlt 함수를 사용해야 합니다. 예를 들어 애니메이션 그래픽과 사운드를 결합하는 멀티미디어 애플리케이션은 SetDIBitsToDevice보다 빠르게 실행되므로 BitBlt 함수를 호출하면 도움이 됩니다.