다음을 통해 공유


CreateDIBSection 함수(wingdi.h)

CreateDIBSection 함수는 애플리케이션이 직접 쓸 수 있는 DIB를 만듭니다. 함수는 비트맵 비트 값의 위치에 대한 포인터를 제공합니다. 함수가 비트맵을 만드는 데 사용할 파일 매핑 개체에 핸들을 제공하거나 시스템에서 비트맵에 대한 메모리를 할당하도록 할 수 있습니다.

구문

HBITMAP CreateDIBSection(
  [in]  HDC              hdc,
  [in]  const BITMAPINFO *pbmi,
  [in]  UINT             usage,
  [out] VOID             **ppvBits,
  [in]  HANDLE           hSection,
  [in]  DWORD            offset
);

매개 변수

[in] hdc

디바이스 컨텍스트에 대한 핸들입니다. iUsage 값이 DIB_PAL_COLORS 경우 함수는 이 디바이스 컨텍스트의 논리적 팔레트를 사용하여 DIB 색을 초기화합니다.

[in] pbmi

비트맵 차원 및 색을 포함하여 DIB의 다양한 특성을 지정하는 BITMAPINFO 구조체에 대한 포인터입니다.

[in] usage

pbmi가 가리키는 BITMAPINFO 구조체의 bmiColors 배열 멤버에 포함된 데이터 형식입니다(논리적 색상표 인덱스 또는 리터럴 RGB 값). 다음 값이 정의됩니다.

의미
DIB_PAL_COLORS
bmiColors 멤버는 hdc로 지정된 디바이스 컨텍스트의 논리적 팔레트에 대한 16비트 인덱스의 배열입니다.
DIB_RGB_COLORS
BITMAPINFO 구조체에는 리터럴 RGB 값의 배열이 포함되어 있습니다.

[out] ppvBits

DIB 비트 값의 위치에 대한 포인터를 수신하는 변수에 대한 포인터입니다.

[in] hSection

함수가 DIB를 만드는 데 사용할 파일 매핑 개체에 대한 핸들입니다. 이 매개 변수는 NULL일 수 있습니다.

hSectionNULL이 아닌 경우 PAGE_READWRITE 또는 PAGE_WRITECOPY 플래그를 사용하여 CreateFileMapping 함수를 호출하여 만든 파일 매핑 개체에 대한 핸들이어야 합니다. 읽기 전용 DIB 섹션은 지원되지 않습니다. 다른 수단으로 만든 핸들로 인해 CreateDIBSection 이 실패합니다.

hSectionNULL이 아닌 경우 CreateDIBSection 함수는 hSection에서 참조하는 파일 매핑 개체의 오프셋 dwOffset에서 비트맵 비트 값을 찾습니다. 애플리케이션은 나중에 CreateDIBSection에서 반환된 HBITMAP를 사용하여 GetObject 함수를 호출하여 hSection 핸들을 검색할 수 있습니다.

hSectionNULL인 경우 시스템은 DIB에 대한 메모리를 할당합니다. 이 경우 CreateDIBSection 함수는 dwOffset 매개 변수를 무시합니다. 애플리케이션은 나중에 이 메모리에 대한 핸들을 가져올 수 없습니다. GetObject 함수를 호출하여 채워진 DIBSECTION 구조체의 dshSection 멤버는 NULL이 됩니다.

[in] offset

비트맵 비트 값에 대한 스토리지가 시작되는 hSection 에서 참조하는 파일 매핑 개체의 시작 부분부터의 오프셋입니다. hSectionNULL인 경우 이 값은 무시됩니다. 비트맵 비트 값은 이중 단어 경계에 맞춰지므로 dwOffsetDWORD 크기의 배수여야 합니다.

반환 값

함수가 성공하면 반환 값은 새로 만든 DIB에 대한 핸들이고 *ppvBits 는 비트맵 비트 값을 가리킵니다.

함수가 실패하면 반환 값은 NULL이고 *ppvBitsNULL입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

GetLastError 는 다음 값을 반환할 수 있습니다.

오류 코드 Description
ERROR_INVALID_PARAMETER
하나 이상의 입력 매개 변수가 잘못되었습니다.

설명

위에서 설명한 것처럼 hSectionNULL이면 시스템은 DIB에 대한 메모리를 할당합니다. 나중에 DeleteObject 함수를 호출하여 DIB를 삭제하면 시스템에서 해당 메모리에 대한 핸들을 닫습니다. hSectionNULL이 아닌 경우 DeleteObject를 호출하여 비트맵을 삭제한 후 hSection 메모리 핸들을 직접 닫아야 합니다.

한 애플리케이션에서 다른 애플리케이션에 DIB 섹션을 붙여넣을 수 없습니다.

CreateDIBSectionBITMAPINFOHEADER 매개 변수 biXPelsPerMeter 또는 biYPelsPerMeter 를 사용하지 않으며 BITMAPINFO 구조에 확인 정보를 제공하지 않습니다.

비트맵에 직접 그리기 전에 GDI 하위 시스템이 CreateDIBSection 에서 만든 비트맵에 대한 그리기를 완료했는지 확인해야 합니다. 비트맵에 대한 액세스는 동기화되어야 합니다. GdiFlush 함수를 호출하여 이 작업을 수행합니다. 이는 SetDIBits와 같은 함수에 대한 호출에서 포인터를 전달하는 것을 포함하여 비트맵 비트 값에 대한 포인터 사용에 적용됩니다.

Icm: 색 관리가 수행되지 않습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 wingdi.h(Windows.h 포함)
라이브러리 Gdi32.lib
DLL Gdi32.dll

추가 정보

BITMAPINFO

비트맵 함수

비트맵 개요

CreateFileMapping

DIBSECTION

DeleteObject

GdiFlush

GetDIBColorTable

GetObject

SetDIBColorTable

SetDIBits