BITMAPINFOHEADER 구조체(wingdi.h)
[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드에서 DirectShow 대신 MediaPlayer, IMFMediaEngine 및 오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
BITMAPINFOHEADER 구조체에는 디바이스 독립적 비트맵(DIB)의 차원 및 색 형식에 대한 정보가 포함되어 있습니다.
구문
typedef struct tagBITMAPINFOHEADER {
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER, *LPBITMAPINFOHEADER, *PBITMAPINFOHEADER;
멤버
biSize
구조체에 필요한 바이트 수를 지정합니다. 이 값은 구조의 끝에 추가되는 경우 색 테이블의 크기 또는 색 마스크의 크기를 포함하지 않습니다. 설명 부분을 참조하세요.
biWidth
비트맵의 너비를 픽셀 단위로 지정합니다. 비트맵의 보폭을 계산하는 방법에 대한 자세한 내용은 비고를 참조하세요.
biHeight
비트맵의 높이를 픽셀 단위로 지정합니다.
- 압축되지 않은 RGB 비트맵의 경우 biHeight 가 양수이면 비트맵은 왼쪽 아래 모서리에 원점이 있는 상향식 DIB입니다. biHeight가 음수이면 비트맵은 왼쪽 위 모서리에 원점이 있는 하향식 DIB입니다.
- YUV 비트맵의 경우 비트맵은 biHeight의 기호에 관계없이 항상 하향식입니다. 디코더는 양수 biHeight가 있는 YUV 형식을 제공해야 하지만 이전 버전과의 호환성을 위해 양수 또는 음의 biHeight를 사용하여 YUV 형식을 수락해야 합니다.
- 압축된 형식의 경우 biHeight 는 이미지 방향에 관계없이 양수여야 합니다.
biPlanes
대상 디바이스의 평면 수를 지정합니다. 이 값은 1로 설정해야 합니다.
biBitCount
픽셀당 비트 수(bpp)를 지정합니다. 압축되지 않은 형식의 경우 이 값은 픽셀당 평균 비트 수입니다. 압축된 형식의 경우 이 값은 이미지가 디코딩된 후 압축되지 않은 이미지의 암시적 비트 깊이입니다.
biCompression
압축된 비디오 및 YUV 형식의 경우 이 멤버는 LITTLE-endian 순서로 DWORD 로 지정된 FOURCC 코드입니다. 예를 들어 YUYV 비디오에는 FOURCC 'VYUY' 또는 0x56595559 있습니다. 자세한 내용은 FOURCC 코드를 참조하세요.
압축되지 않은 RGB 형식의 경우 다음 값이 가능합니다.
값 | 의미 |
---|---|
|
압축되지 않은 RGB. |
|
색 마스크가 있는 압축되지 않은 RGB입니다. 16bpp 및 32bpp 비트맵에 유효합니다. |
자세한 내용은 설명 부분을 참조하십시오. BI_JPG 및 BI_PNG 비디오 형식이 잘못되었습니다.
16bpp 비트맵의 경우 biCompression 이 BI_RGB 같으면 형식은 항상 RGB 555입니다. biCompression이 BI_BITFIELDS 같으면 형식은 RGB 555 또는 RGB 565입니다. AM_MEDIA_TYPE 구조체의 하위 형식 GUID를 사용하여 특정 RGB 형식을 확인합니다.
biSizeImage
이미지의 크기(바이트)를 지정합니다. 압축되지 않은 RGB 비트맵의 경우 0으로 설정할 수 있습니다.
biXPelsPerMeter
비트맵에 대한 대상 디바이스의 가로 해상도(미터당 픽셀)를 지정합니다.
biYPelsPerMeter
비트맵에 대한 대상 디바이스의 세로 해상도(미터당 픽셀)를 지정합니다.
biClrUsed
비트맵에서 실제로 사용되는 색 테이블의 색 인덱스 수를 지정합니다. 자세한 내용은 설명 부분을 참조하십시오.
biClrImportant
비트맵을 표시하는 데 중요한 것으로 간주되는 색 인덱스의 수를 지정합니다. 이 값이 0이면 모든 색이 중요합니다.
설명
색 표
BITMAPINFOHEADER 구조 뒤에 색상표 항목 또는 색 마스크의 배열이 뒤따를 수 있습니다. 규칙은 biCompression의 값에 따라 달라집니다.- biCompression이 BI_RGB 같고 비트맵이 8bpp 이하를 사용하는 경우 비트맵에는 BITMAPINFOHEADER 구조 바로 뒤의 색 테이블이 있습니다. 색 테이블은 RGBQUAD 값의 배열로 구성됩니다. 배열의 크기는 biClrUsed 멤버가 지정합니다. biClrUsed가 0이면 배열에 지정된 비트 패스의 최대 색 수가 포함됩니다. 즉, 2^biBitCount 색입니다.
- biCompression이 BI_BITFIELDS 같은 경우 비트맵은 픽셀의 바이트 레이아웃을 지정하는 세 개의 DWORD 색 마스크(각각 빨간색, 녹색 및 파란색)를 사용합니다. 각 마스크의 1비트 는 픽셀 내의 해당 색에 대한 비트를 나타냅니다.
- biCompression이 비디오 FOURCC인 경우 색 테이블의 존재는 비디오 형식에 의해 암시됩니다. 비트 깊이가 8 bpp 이하일 때 색 테이블이 있다고 가정해서는 안 됩니다. 그러나 일부 레거시 구성 요소는 색 테이블이 있다고 가정할 수 있습니다. 따라서 BITMAPINFOHEADER 구조를 할당하는 경우 색 테이블이 사용되지 않더라도 비트 깊이가 8bpp 이하인 경우 색 테이블에 대한 공간을 할당하는 것이 좋습니다.
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO;
BITMAPINFOHEADER를 BITMAPINFO로 캐스팅하는 경우 bmiHeader 멤버는 BITMAPINFOHEADER를 참조하고 bmiColors 멤버는 색 테이블의 첫 번째 항목 또는 첫 번째 색 마스크를 참조합니다.
비트맵에서 색 테이블 또는 색 마스크를 사용하는 경우 전체 형식 구조의 크기(BITMAPINFOHEADER 및 색 정보)는 또는 sizeof(BITMAPINFO)
과 같지 sizeof(BITMAPINFOHEADER)
않습니다. 각 instance 대한 실제 크기를 계산해야 합니다.
Surface Stride 계산
압축되지 않은 비트맵에서 stride는 픽셀 한 행의 시작에서 다음 행의 시작까지 이동하는 데 필요한 바이트 수입니다. 이미지 형식은 이미지의 최소 보폭을 정의합니다. 또한 그래픽 하드웨어는 이미지가 포함된 표면에 더 큰 보폭이 필요할 수 있습니다.압축되지 않은 RGB 형식의 경우 최소 보폭은 항상 이미지 너비(바이트)이며 가장 가까운 DWORD로 반올림됩니다. 보폭 및 이미지 크기를 계산하려면 GDI_DIBWIDTHBYTES 및/또는 GDI_DIBSIZE 매크로 또는 다음 수식을 사용할 수 있습니다.
stride = ((((biWidth * biBitCount) + 31) & ~31) >> 3);
biSizeImage = abs(biHeight) * stride;
YUV 형식의 경우 최소 보폭을 계산하는 일반적인 규칙은 없습니다. 특정 YUV 형식에 대한 규칙을 이해해야 합니다. 가장 일반적인 YUV 형식에 대한 설명은 비디오 렌더링에 권장되는 8비트 YUV 형식을 참조하세요.
디코더 및 비디오 원본은 biWidth가 이미지 너비(픽셀)인 형식을 제안해야 합니다. 비디오 렌더러에 기본 이미지 보폭보다 큰 표면 보폭이 필요한 경우 다음 값을 설정하여 제안된 미디어 형식을 수정합니다.
- biWidth를 픽셀 단위로 표면 보폭과 동일하게 설정합니다.
- VIDEOINFOHEADER 또는 VIDEOINFOHEADER2 구조체의 rcTarget 멤버를 이미지 너비와 픽셀 단위로 설정합니다.
이미지 버퍼에 안쪽 여백이 있는 경우 패딩을 위해 예약된 메모리에 포인터를 역참조하지 마세요. 이미지 버퍼가 비디오 메모리에 할당된 경우 패딩을 읽을 수 없는 메모리일 수 있습니다.
요구 사항
머리글 | wingdi.h |