#include <atlimage.h>
inline void RGBtoGray(COLORREF& rgb)
{
BYTE byGray = (GetRValue(rgb) * 30
+ GetGValue(rgb) * 59
+ GetBValue(rgb) * 11)/100;
rgb = RGB(byGray, byGray, byGray);
}
void CSaveGrayDemoView::OnLButtonDown(UINT nFlags, CPoint point)
{
// 바탕 화면 윈도우 객체에 대한 포인터를 얻음
CWnd* pWndDesktop = GetDesktopWindow(); // 바탕 화면 윈도우 DC
CWindowDC ScrDC(pWndDesktop); // 뷰 윈도우 DC
CClientDC dc(this);
// 바탕 화면 크기 및 색상수와 동일한 비트맵 이미지를 만든다.
CImage Image;
Image.Create(300, 300, ScrDC.GetDeviceCaps(BITSPIXEL));
// 이미지 DC와 화면 DC에 바탕 화면 윈도우 DC를 출력한다.
CDC* pDC = CDC::FromHandle(Image.GetDC());
pDC->BitBlt(0, 0, 300, 300, &ScrDC, 0, 0, SRCCOPY);
Image.ReleaseDC();
// 일부(200 * 200)를 흑백 이미지로 변환
COLORREF rgb;
for(int x = 0; x < 200; x++)
{
for(int y = 0; y < 200; ++y)
{
rgb = Image.GetPixel(x, y);
// Gray RGB 값으로 변환
RGBtoGray(rgb);
Image.SetPixel(x, y, rgb);
}
}
// 흑백으로 변환된 이미지를 화면 DC에 출력
Image.BitBlt(dc.m_hDC, 0, 0);
CView::OnLButtonDown(nFlags, point);
}
'Programming > MFC' 카테고리의 다른 글
비트맵 및 이미지 처리 - 바탕 화면 이미지 저장 및 실행 (0) | 2010.06.27 |
---|---|
비트맵과 이미지 처리 (1) | 2010.06.22 |