시리얼라이즈 함수

void CtestDoc::Serialize(CArchive& ar)
{
 if (ar.IsStoring())
 {
  // TODO: 여기에 저장 코드를 추가합니다.
  ar.Write(m_OutImage,256*256);
 }
 else
 {
  // TODO: 여기에 로딩 코드를 추가합니다.
  CString strTemp = ar.m_strFileName.Right(3);

  if(toupper(strTemp[0]) == 'R' &&
   toupper(strTemp[1]) == 'A' &&
   toupper(strTemp[2]) == 'W')
  {
   CFile *infile = ar.GetFile();
   if(infile->GetLength()!=256*256)
   {
    AfxMessageBox(_T("영상파일 크기가 256*256 아님"));
    return;
   }

  }

   else if(toupper(strTemp[0]) == 'B' &&
     toupper(strTemp[1]) == 'M' &&
     toupper(strTemp[2]) == 'P')
   {
    CFile *infile = ar.GetFile();

    BITMAPFILEHEADER hfileInfo;
    BITMAPINFOHEADER hbmpInfo;
    RGBQUAD hRGB[256];

    ar.Read(&hfileInfo, sizeof(BITMAPFILEHEADER));
    ar.Read(&hbmpInfo, sizeof(BITMAPINFOHEADER));
    ar.Read(&hRGB, sizeof(RGBQUAD) *256);
    ar.Read(m_InImage, sizeof(unsigned char) * hbmpInfo.biWidth * hbmpInfo.biHeight);
   }
   else
   {
    AfxMessageBox(_T("읽을 수 있는 파일 형식이 아님"));
    return;
   }
  }
 }

 

온 드로우(뷰)

void CtestView::OnDraw(CDC* pDC)
{
 CtestDoc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);
 if (!pDoc)
  return;
 for(int i=0; i<256; i++)
 {
  for(int j=0; j<256; j++)
  {
   unsigned char InVal = pDoc -> m_InImage[i][j];
   unsigned char OutVal = pDoc -> m_OutImage[i][j];
   pDC->SetPixel(j,i,RGB(InVal,InVal,InVal));
   pDC->SetPixel(j+300,i,RGB(OutVal,OutVal,OutVal));
  }
 }

 // TODO: 여기에 원시 데이터에 대한 그리기 코드를 추가합니다.
}

 

 

 

저역통과 필터로 경계선을 흐리게 만들어보자.

 

void CtestDoc::LPF()
{
 // TODO: 여기에 명령 처리기 코드를 추가합니다.
 int temp;
 int mask[3][3] = {{1,1,1},{1,1,1},{1,1,1}};
 for(int i=1; i<255; i++){
  for(int j=1; j<255; j++){
   temp = 0;
   for(int r=0; r<3; r++){
    for(int c=0; c<3; c++)
     temp += mask[r][c] * m_InImage[i+r-1][j+c-1]; //마스크를 제 위치에 자리잡는 부분.
   }
   m_OutImage[i][j] = (unsigned char)(temp/9);
  }
 }

 for(int i=0; i<256; i++){ //모서리 부분을 처리하는 부분.
  m_OutImage[0][i] = m_InImage[0][i];
  m_OutImage[0][i] = m_InImage[i][0];
  m_OutImage[255][i] = m_InImage[255][i];
  m_OutImage[i][255] = m_InImage[i][255];
 }
 UpdateAllViews(NULL);
}

 

,