Programming/MFC2010. 6. 27. 17:38


#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);
}
Posted by zzibong
Programming/Java2010. 6. 22. 23:56

import java.util.ArrayList;

ArrayList<Egg> myList = new ArrayList<Egg>(); 
// 새로 만듭니다.

Egg s = new Egg();
myList.add(s);
// 객체 매개변수 Egg를 목록에 추가합니다.

int theSize = myList.size();
// 현재 목록에 들어있는 원소의 개수를 리턴합니다.

boolean isIn = myList.contains(s);
// 객체 매개변수 s가 목록에 있으면 true를 리턴합니다.

int idx = myList.indexOf(s);
// 객체 매개변수 s의 인덱스 또는 -1을 리턴합니다.

boolean empty = myList.isEmpty();
// 목록에 아무 원소도 없으면 true를 리턴합니다.

myList.remove(s);
// 주어진 객체가 ArrayList에 있으면 그 객체를 제거합니다.

myList.get(int index);
// 주어진 index 매개변수 위치에 있는 객체를 리턴합니다.
Posted by zzibong
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