2012-03-15 4 views
1

4 비트 인덱싱 된 비트 맵에서 GDI + apis를 사용하여 기본 그래픽 프리미티브 (선, 사각형 등)를 그리려고합니다. 비트 맵을 만들고 비트 맵을로드하는 데 Bitmap() 함수를 사용하고 있습니다.GDI +에서 4 비트 인덱스 이미지 그리기

Bitmap myBitmap(100/*width*/,100/*height*/,PixelFormat4bppIndexed/*Pixel format*/); 
Graphics graphics(&myBitmap); 
SolidBrush brush(Color(255,128,0,0)); 
graphics.FillRectangle(&brush,0,0,100,100); 

하지만 작동하지 않습니다 (사각형이 만들어지지 않음). 무엇이 문제 일 수 있습니까? 나는 수동으로 LockBits를 사용하여 수동으로 시도했으나, 수동으로 비트를 수정하면 작동이 잘되고, 왜 Graphics gdi + 작업이 작동하지 않는가?

+0

먼저 팔레트를 만들어야합니까? – xanatos

+0

> 그러나 이것은 작동하지 않습니다 (Rectangle이 생성되지 않았습니다). 예외가 발생하지 않습니까? – tafa

+0

함수 반환 값을 무시하지 마십시오. 이 작업을 수행 할 수 없으며 색인 된 색상 형식을 가진 비트 맵을 그리는 기능이 지원되지 않습니다. –

답변

0

마침내 나는 내 문제를 해결할 수있었습니다. 4 비트 인덱스 비트 맵에서 Graphics 객체를 사용하여 gdi + 연산을 수행하려면 다음 단계를 수행해야합니다.

  1. 4bpp HBITMAP을 직접 만들거나 LoadImage를 사용하여 파일에서 이미지를로드하십시오.
  2. 4bpp 파일에서로드하는 경우 HPALETTE 개체의 파일에서 팔레트를로드하십시오.
  3. 데스크톱 호환 dc를 만듭니다.
  4. 새로 생성 된 DC에서 팔레트를 선택하고 실현하십시오.
  5. DC에서 HBITMAP을 선택하십시오.
  6. dc를 사용하여 그래픽 개체를 만듭니다.
  7. 4bpp에서 GDI + 작업을 인덱싱합니다.

비록 내가 8bpp로 시도하지는 않았지만 비슷한 작업이 8bpp에서도 수행 될 수 있다고 생각합니다.

희망이 다른 사람도 도움이됩니다.

관련 문제