Programming/MFC2010. 6. 22. 00:59



void CBmpDisplayDemoView::OnPaint()
{
 CPaintDC dc(this); // device context for painting
 
 CDC MemDC;
 BITMAP bmpInfo;
 // 화면 DC와 호환되는 메모리 DC 생성
 MemDC.CreateCompatibleDC(&dc);
 // 비트맵 리소스 로딩
 CBitmap bmp;
 CBitmap *pOldBmp = NULL;
 bmp.LoadBitmap(IDB_BITMAP1);
 // 로딩된 비트맵 정보
 bmp.GetBitmap(&bmpInfo);
 // 메모리 DC에 선택
 pOldBmp = MemDC.SelectObject(&bmp);
 // 메모리 DC에 비트맵을 화면 DC로 복사하여 출력
 dc.StretchBlt(20, 20,
  bmpInfo.bmWidth * 2, bmpInfo.bmHeight * 2,
  &MemDC,
  0, 0,
  bmpInfo.bmWidth, bmpInfo.bmHeight,
  SRCCOPY);  // 래스터 연산 값

 dc.TransparentBlt(20, 100,
  bmpInfo.bmWidth * 2, bmpInfo.bmHeight * 2,
  &MemDC,
  0, 0,
  bmpInfo.bmWidth, bmpInfo.bmHeight,
  RGB(0, 0, 0)); // 투명 처리될 색상의 RGB

 MemDC.SelectObject(pOldBmp);

}



/*
래스터 연산
SRCCOPY                    // 메모리 DC의 내용에 변화를 주지 말고 그대로 화면 DC에 복사
SRCAND                       // 원본과 대상을 AND 연산하여 출력
NOTSRCCOPY              // 원본 이미지의 색상을 반전시켜 출력
DSTINVERT                   // 원본 이미지와는 상관없이 대상 이미지를 반전시켜 출력


BOOL BitBlt(
   int x, int y,                   // 출력할 윈도우의 좌표
   int nWidth, int nHeight,  // 출력할 비트맵의 폭과 높이
   CDC* pSrcDC,             // 출력할 비트맵을 저장한 메모리 DC의 주소
   int xSrc, int ySrc,          // 메모리 DC에 들어 있는 비트맵의 시작 좌표
   DWORD dwRop            // 적용할 래스터 연산
);

dc.StretchBlt(200, 200,  // 출력될 좌표
     250 * 2, 300 * 2,     // 폭과 높이를 두배 확대
     &MemDC,
     350, 200,               // 원본 이미지 좌표
     250, 300,               // 원본 이미지의 폭과 높이
     SRCCOPY
);
*/

Posted by zzibong