DirectDraw¿¡¼­ 256»ö Bitmap °£ÆíÈ÷ »ç¿ëÇϱâ


1.¿ä¾à

256»ö BitmapÀ» DirectDrawÀÇ Blt()ÇÒ¶§ °£ÆíÈ÷ »ç¿ëÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸°Ú½À´Ï´Ù.


2.º»¹®

DirectDraw¿¡¼­ 256»ö BitmapÀ» »ç¿ëÇÏ¿© ºí¸®Æ® ½ÃŰ´Â °æ¿ì, System DisplayModeÀÇ Bit¼ö(8Bit, 16Bit...)¿¡ µû¶ó ¿©·¯°¡ÁöÀÇ Ã³¸®¸¦ ÇØÁÖ¾î¾ß À̹ÌÁö°¡ ±úÁöÁö ¾Ê½À´Ï´Ù. ±×¸®°í ÆÈ·¡Æ®µµ ¸ðµÎ ¸ÂÃß¾î ÁÖ¾î¾ß ÇÏÁö¿ä.

ÀÌ·²°æ¿ì À̹ÌÁö¸¦ ·ÎµåÇÑ ÈÄ StretchDIBits()ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© OffScreen¿¡ CopyÇÑ ÈÄ BackSurface¿¡ Blt()½Ã۸é ÀÚµ¿À¸·Î ÀÌ ¸ðµç ¹®Á¦Á¡µéÀ» ÇØ°áÇØ Áֱ⠶§¹®¿¡ ¾ÆÁÖ °£ÆíÇÕ´Ï´Ù. ¹°·Ð ÆÈ·¡Æ® 󸮵µÇØÁÝ´Ï´Ù. ÁÖÀÇÇÒ Á¡Àº ·ÎµåÇÒ ¶§ Pitch°ªÀ» µð½ºÇ÷¹ÀÌ ¸ðµå¿¡ ¸Â°Ô ¼³Á¤ÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù. ´Ü, StretchDIBits()ÇÔ¼öÀÇ ¼Óµµ¸¸Å­ ´À·ÁÁö´Âµ¥ À̰ÍÀº À̹ÌÁö¸¦ LoadÇÒ¶§ Çѹø »ÓÀ̹ǷΠ½ÇÁ¦·Î À̹ÌÁö Ãâ·ÂºÎºÐÀÇ ¼Óµµ¿µÇâÀº ¾ø½À´Ï´Ù.


3.¿¹Á¦


//******* À̹ÌÁö ·Îµå ****************** 

Image->Load(); 



//******* Copy ************************ 

m_lpDDSImg = CopyImage(&Image); 



//******* ·ÎµåÇÑ À̹ÌÁö¸¦ StretchDIBits()¸¦ ÀÌ¿ëÇÏ¿© CopyÇϱâ 

void CopyImage(CDIB *pImg); 

HDC                 hdc; 

DDSURFACEDESC2      ddsd; 

HRESULT             hr; 

LPDIRECTDRAWSURFACE7 lpdds; 



int nWidth = pImg->GetWidth();      //À̹ÌÁöÀÇ °¡·Î ³ÐÀÌ 

int nHeight = pImg->GetHeight();    //À̹ÌÁöÀÇ ¼¼·Î ³ÐÀÌ 



ddsd.dwSize = sizeof(ddsd); 

ddsd.dwFlags = DDSD_HEIGHT | DDSD_WIDTH; 



//À̹ÌÁöÀÇ Å©±â¿¡ ¸Â°Ô OffScreen¸¸µé±â 

lpdds = ddCreateOffScreen(nWidth, nHeight, 0, 0); 

if(lpdds == NULL) 

return NULL; 



lpdds->Restore(); 



lpdds->GetSurfaceDesc(&ddsd); 

hr = lpdds->GetDC(&hdc);  //ÇÚµé ¾ò±â 



if(hr == DD_OK) 

{ 

    // Copy Çϱâ 

    StretchDIBits(hdc, 

        0,                  // dest x 

        0,                  // dest y 

        nWidth,    // dest width 

        nHeight,            // dest height 

        0,                 // src x 

        0,                 // src y 

        nWidth,    // src width 

        nHeight,    // src height 

        pDibSpr->m_pBits,  //bits 

        pDibSpr->m_pBmpInfo, 

        DIB_RGB_COLORS,    // options 

        SRCCOPY);    // rop 

    

    lpdds->ReleaseDC(hdc); 

} 



//************** offscreenÀ» BackSurface¿¡ Blt()½Ã۱â ***** 

if(FAILED(m_lpBackSurface->Blt(&rDest, m_lpDDSImage, 

   &rSrc, DDBLT_WAIT|DDBLT_KEYSRC, NULL);   

return FALSE; 



- 2001.08.13 Smile Seo -