/********************************************* À©µµ¿ì¿¡¼­ ¾ÐÃàÀ» ¸øÇÏ´Â °ü°è·Î ÀÌ·¸°Ô È­ÀÏ Çϳª¿¡ Çì´õ¿Í ¼Ò½º¸¦ ÇѲ¨¹ø¿¡ ³Ö°Ô µÇ¾ú³×¿ä... ÀÌ°Ç È­ÀÏ¿¡ Á¦°¡ ¸¸µç µ¶Æ¯ÇÑ Çü½ÄÀ¸·Î ½Ã¸®¾ó¶óÀÌ¡ÇÒ·Á°í CObject ¸¦ °è½Â ¹Þ¾ÒÀ»»Ó »ç½Ç»óÀº MFC¿Í ¾Æ¹«·± »ó°üÀÌ ¾ø´Â Ŭ·¡½º ÀÔ´Ï´Ù. Á¶±Ý¸¸ ¼öÁ¤ÇÑ´Ù¸é ¾ó¸¶µçÁö API·Î »ç¿ëÇϽǼö ÀÖÁÒ..^^ ºñµð¿ÀÆ÷ À©µµ¿ìÁî ¶óÀ̺귯¸®´Â ºñÁ°¾¾°¡ ±âº»ÀûÀ¸·Î Á¦°øÇϴ°Š°°½À´Ï´Ù. ±×³É #include ¶ó°í Çì´õ¿¡ ½áÁÖ°í ¼ÂÆÃ¿¡¼­ ¸µÅ©¿¡´Ù°¡ vfw32.lib ¶ó°í ½áÁÖ¸é µÇÁÒ... ±×·³... °¨ÀÚ ¼º¼ö¿Ã¸²...@~ PS. serealize ÇÔ¼ö´Â »°½À´Ï´Ù. ¾Æ¸¶µµ ÀÌÁ¨ CObject °¡ ÇÊ¿ä ¾øÀ»µí.... Áö¿ì°í ÇØº¸¼Å¿ä... ***********************************************/ //////////////////////////////// // // GDib.h // /////////////////////////////// #ifndef _GDIB_H #define _GDIB_H #include class GDib : public CObject { public: GDib(); ~GDib(); DWORD GetWidth(); DWORD GetHeight(); DWORD Getbpp(); LPBYTE GetBits(); CSize GetSize(); BOOL LoadDib( CString fileName ); void Close(); void BitBlt( CDC* pDC , int x=0, int y=0, int w=0, int h=0, int sx=0, int sy=0, int sw=0, int sh=0, DWORD dwRop=0); void BitBlt( CDC* pDC , CRect tRect, CRect sRect = CRect(0,0,0,0), DWORD dwRop=0 ); protected: LPBYTE m_pDIB; DWORD m_Image; DWORD m_DataSize; HDRAWDIB m_hDrawDib; BOOL IsValid() { return (m_hDrawDib != NULL); } }; #endif //////////////////////////////// // // GDib.cpp // /////////////////////////////// #include "GDib.h" #include // for GlobalAllocPtr GDib::GDib() { m_hDrawDib = NULL; m_pDIB = NULL; m_Image = 0; m_DataSize = 0; } GDib::~GDib() { Close(); } ////////////////////////// // ºñÆ®¸ÊÀ» È­¸é¿¡ ±×¸°´Ù ////////////////////////// void GDib::BitBlt( CDC* pDC , int x, int y, int w, int h, int sx, int sy, int sw, int sh, DWORD dwRop ) { if( IsValid() == FALSE ) return; if( sw <= 0 ) sw = GetWidth(); if( sh <= 0 ) sh = GetHeight(); if( w <= 0 ) w = sw; if( h <= 0 ) h = sh; DrawDibDraw (m_hDrawDib, pDC->m_hDC, x, y, w, h, (BITMAPINFOHEADER*) m_pDIB, GetBits(), sx, sy, sw, sh, dwRop ); } void GDib::BitBlt( CDC* pDC , CRect tRect, CRect sRect, DWORD dwRop ) { BitBlt( pDC, tRect.left, tRect.top, tRect.right - tRect.left, tRect.bottom - tRect.top , sRect.left, sRect.top, sRect.right - sRect.left, sRect.bottom - sRect.top, dwRop ); } ////////////////////////// // °´Ã¼¸¦ ÃʱâÈ­ ÇÑ´Ù. ////////////////////////// void GDib::Close() { if( IsValid() ) { DrawDibClose(m_hDrawDib); m_hDrawDib = NULL; if(m_pDIB) { GlobalFreePtr(m_pDIB); } m_pDIB = NULL; m_Image = 0; m_DataSize = 0; } } ///////////////////////////////// // È­ÀÏ¿¡¼­ bmpÆÄÀÏÀ» Àоî¿Â´Ù. ///////////////////////////////// BOOL GDib::LoadDib( CString pzFileName) { BITMAPFILEHEADER bmpfh; CFile file; int nHeaderSize = sizeof(BITMAPFILEHEADER); Close(); if (!(m_hDrawDib = DrawDibOpen())) goto bail; if (!file.Open(pzFileName, CFile::modeRead | CFile::typeBinary)) goto bail; if (file.Read((void *) &bmpfh, nHeaderSize) != (UINT) nHeaderSize) goto bail; if (bmpfh.bfType != *((WORD*) "BM")) goto bail; m_pDIB = (LPBYTE) GlobalAllocPtr(GMEM_MOVEABLE, bmpfh.bfSize - nHeaderSize); if (!m_pDIB) goto bail; m_DataSize = bmpfh.bfSize - nHeaderSize; file.Read(m_pDIB, m_DataSize); file.Close(); m_Image = bmpfh.bfOffBits - nHeaderSize; return TRUE; bail: Close(); return FALSE; } //////////////////////////////////// // ºñÆ®¸ÊÀÇ °¢Á¾ Á¤º¸¸¦ ¾ò¾î¿Â´Ù. //////////////////////////////////// LPBYTE GDib::GetBits() { if( IsValid() == FALSE ) return 0; return m_pDIB + m_Image; } DWORD GDib::GetWidth() { if( IsValid() == FALSE ) return 0; return ((BITMAPINFOHEADER*) m_pDIB)->biWidth ; }; DWORD GDib::GetHeight() { if( IsValid() == FALSE ) return 0; return ((BITMAPINFOHEADER*) m_pDIB)->biHeight ; }; CSize GDib::GetSize() { return CSize( GetWidth(),GetHeight()); } DWORD GDib::Getbpp() { if( IsValid() == FALSE ) return 0; return ((BITMAPINFOHEADER*) m_pDIB)->biBitCount ; };