오전 10:58 2000/11/08 조경민
파레트 in MemoryDC 비트맵

=============================================

// 원본 DC
        HDC hSDC = ::GetDC(::GetActiveWindow());
        //HDC hSDC = ::CreateDC("DISPLAY",NULL,NULL,NULL);
// 현재 Bit Per Pixel 얻어오기
        int nBPP = GetDeviceCaps( hSDC, BITSPIXEL );
// Create MemDC
        HDC hMDC = ::CreateCompatibleDC( hSDC );

// Create MemBitmap
        HBITMAP hBitmap = ::CreateCompatibleBitmap( hSDC, lpInfo->szScreen.cx, lpInfo->szScreen.cy );
// Apply MemBitamp to MemDC
        ::SelectObject( lpInfo->hDC, hBitmap );
        
// 8비트면 파레트 적용
        if(  nBPP == 8 )
        {
                UINT nSize = sizeof(LOGPALETTE) + (sizeof(PALETTEENTRY) * 256);
                LOGPALETTE *pLP = (LOGPALETTE *) new BYTE[nSize];

                pLP->palVersion = 0x300;
                pLP->palNumEntries = 256 ;

                for( int i=0; i < 256 ; i++)
                {
                        pLP->palPalEntry[i].peRed = (BYTE) (((i >> 5) & 0x07) * 255 / 7);
                        pLP->palPalEntry[i].peGreen = (BYTE) (((i >> 2) & 0x07) * 255 / 7);
                        pLP->palPalEntry[i].peBlue = (BYTE) (((i >> 0) & 0x03) * 255 / 3);
                        pLP->palPalEntry[i].peFlags = 0;
                }

                m_hPal = CreatePalette( pLP );

// 파레트를 메모리 DC에 적용
                SelectPalette( hMDC, m_hPal, FALSE );
                RealizePalette( hMDC);

                delete[] pLP;
                MessageBox( NULL, "파레트 적용", "8비트 컬러", MB_OK);
        }        

// hMDC에 그리면 된다.

'KB > MFC/Win32' 카테고리의 다른 글

MemoryDC 만들기  (0) 2004.03.19
ASP 업로드 컴포넌트 만들기  (0) 2004.03.19
트리 에디트 가능하게 하기  (0) 2004.03.19
툴바 리바 색깔 바꾸기  (0) 2004.03.19
윈도우 타이틀 깜빡거리게 하기  (0) 2004.03.19

+ Recent posts