|
현재 Bitmap의 rowdata만 가지고
하나의 BITMAP을 만들려고 합니다.
그 중 BITMAPINFO 구조체를 만드는 과정에서
BITMAPINFOHEADER는 만들었지만
RGBQUAD에 Color수에 따라 배열을 생성하고
ColorTable을 만들어주어야 합니다.
24Bit이상에서는 이 ColorTable을 만들지 않아도 되지만,
2, 16, 256 Color는 ColorTable을 직접 만들어야 합니다.
제가 기존에 Bitmap Handle을 받아서 처리 한 루틴입니다.
if(nColorData != 0){ // nColorData는 Color수
RGBQUAD* rgb = new RGBQUAD[nColorData];
CClientDC dc(NULL);
CDC memdc;
memdc.CreateCompatibleDC(&dc);
memdc.SelectObject(hBitmap);
for(int i = 0; i < GetDIBColorTable(memdc, 0, nColorData, rgb); i++){
pBmi->bmiColors[i].rgbRed = rgb[i].rgbRed;
pBmi->bmiColors[i].rgbGreen = rgb[i].rgbGreen;
pBmi->bmiColors[i].rgbBlue = rgb[i].rgbBlue;
pBmi->bmiColors[i].rgbReserved = rgb[i].rgbReserved;
}
delete[] rgb;
rgb = NULL;
}
DC의 컬러 정보를 가져와 알아서 ColorTable을 생성 시켜주어 편리했죠
하지만 DC가 없는 상황에서 ColorTable을 만들려니까
이노무 머리가 딸려서 알고리즘이 안되네요..
16 Color의 경우 Shift연산과 비트 연산이 들어가야하는데
노가다(?)로 컬러 정보를 입력하는건 너무 후퇴된 방법이고
2, 16, 256 Color Table을 생성하는 코드를 알고 계신분은 공유좀 해주시겠습니까?
예를 든다면 이런식으로죠
GetColorTable(nColorData, rgb)
|