2010-06-04 6 views
2

CreateBitmap으로 만든 비트 맵을 사용하여 CreatePatternBrush를 사용하여 브러시를 만듭니다.CreatePatternBrush 및 화면 색 깊이

비트 맵의 ​​너비가 1 픽셀이고 높이가 24 픽셀이므로 각 픽셀에 RGB 값이 있으므로 rgbquads 배열을 만들어 CreateBitmap에 전달합니다.

내가 만드는 비트 맵 또한 32bpp이기 때문에 화면의 색 농도가 32bpp이면 잘 작동합니다.

화면 색 농도가 32bpp가 아닌 경우, 호환되지 않는 비트 맵을 대신 작성해야하므로이 작업은 실패하고 그 이유를 이해합니다.

대신 CreateCompatibleBitmap을 사용해야하는 것 같습니다.하지만 그 비트 맵에 포함 된 픽셀 데이터를 어떻게 넣어야합니까?

또한 등 CreateDIBPatternBrushPt, CreateDIBitmap, CreateDIBSection, 나는하여 DIBSection 무엇인지 이해하고, 피사체가 일반적으로 혼란을 발견하지는

에 대해 읽었습니다.

화면과 동일한 색 깊이의 비트 맵이 필요하지만 32bpp 픽셀 데이터 만 갖는 방법은 무엇입니까?

답변

2

장치 독립적 비트 맵을 화면 색 농도와 별도로 사용할 수 있기 때문에 DIB를 만들 수 있습니다. CreateDIBSection()을 참조하십시오.

어떻게 32bpp 픽셀 데이터 만 가지고 만들 수 있습니까? DIB는 32bpp 데이터로 생성 될 수 있습니다. 당신이 문서에서 읽을 수 있듯이 :

CreateDIBSection 함수는 응용 프로그램을 직접 에 쓸 수있는 DIB를 생성한다. 이 함수는 비트 맵 비트 값의 위치에 대한 포인터를 제공합니다. hSection이 NULL이면 시스템 이 DIB에 메모리를 할당합니다. 함수가 성공하면 반환 값은 새로 만든 DIB에 대한 핸들이고 * ppvBits는 비트 맵 비트 값을 가리 킵니다. 이 같은

시도 뭔가 : 우리의 경우

VOID *ppvBits = NULL; 
BITMAPINFO BitmapInfo; 
memset(&BitmapInfo, 0, sizeof(BITMAPINFOHEADER)); 
BitmapInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); 
BitmapInfo.bmiHeader.biWidth = 1; 
BitmapInfo.bmiHeader.biHeight = 24; 
BitmapInfo.bmiHeader.biPlanes = 1; 
BitmapInfo.bmiHeader.biBitCount = 32; 
BitmapInfo.bmiHeader.biCompression = BI_RGB; 
HBITMAP hBitmap = CreateDIBSection(hDC, &BitmapInfo, DIB_RGB_COLORS, &ppvBits, NULL, 0); 

* ppvBits 포인트 1 * 24 * (8분의 32) 할당 된 바이트.

biHeight가 양수이면 비트 맵은 상향식 DIB이고 원점은 왼쪽 아래 모퉁이임을 알고 있어야합니다. 자세한 내용은 BITMAPINFOHEADER Structure을 참조하십시오.

+0

답변 해 주셔서 감사합니다. 코드를 작성하기 전에 몇 가지 사항을 이해하려고합니다. BITMAPINFO는 BITMAPINFO 또는 BITMAPINFOHEADER입니까? BITMAPINFO의 bmiColors가 색상 표인 것은 꽤 shure입니다. bmiColors 또는 무엇을 제공해야합니까? CreateDIBSection의 iUsage 매개 변수 : "pbmi (논리 색상 표 인덱스 또는 리터럴 RGB 값)가 가리키는 BITMAPINFO 구조체의 bmiColors 배열 멤버에 포함 된 데이터 형식입니다." "DIB_RGB_COLORS : BITMAPINFO 구조체에는 리터럴 RGB 값의 배열이 들어 있습니다." 리터럴 RGB 값의 배열은 무엇입니까? –

+0

나는 bmiColors 항목을 무시하고 BITMAPINFOHEADER가 아니라 BITMAPINFO를 전달해야한다고 추측합니다.이 경우는 32bpp 비트 맵이며 색상 표가 없기 때문입니다. 그러나 바보이거나 MSDN이 매우 혼란 스럽거나 어쩌면 둘 다 모르겠다. 네가 나 한테 빛을 바꿀 수 있다고 생각하니? –

+0

코드에서 bmiColors를 무시하므로 제 추론이 옳다고 생각합니다. –

0

CreateCompatibleBitmap 및 SetPixel을 사용하여 해결했습니다. 내가 선택한 최선의 선택은 아니지만 작동합니다.