|
for(r=0;r<256;r+=51)
for(g=0;g<256;g+=51)
for(b=0;b<256;b+=51)
{
lpLogPalette->palPalEntry[i].peRed=r;
m_pRGB[i].rgbRed=r;
lpLogPalette->palPalEntry[i].peGreen=g;
m_pRGB[i].rgbGreen=g;
lpLogPalette->palPalEntry[i].peBlue=b;
m_pRGB[i].rgbBlue=b;
i++;
if(i>256)
return TRUE;
}
이건 256칼라 팔레트 만드는 방식입니다.
팔레트의 색상을 정하는 것은 여러가지 방법이 있을 수 있습니다.
일반적으로 같은 간격(51)의 색을 설정할때는 위코드처럼 하구요.
이미지가 대체로 특정색에 쏠려 있다면 많이 쓰이는 칼라부분을 작은 간격으로 쪼개서 만들고
적게 쓰이는 부분은 듬성듬성 만드는 거죠. 이거는 아주 특별한 경우이고요.
위에 처럼 쓰시면 됩니다.
서비 님이 쓰신 글 :
: 현재 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)
|