¿¹Á¦ 6) ¿µ»ó ºä¾î ( Image Viewer ) °³¿ä : ¸Þ´º¿¡¼­ '¿µ»ó º¸±â' Ç׸ñ¿¡ 'RAW ¿µ»ó º¸±â'¸¦ Ŭ¸¯Çϸé, RAW¿µ»ó Á¤º¸¸¦ ³Ö°í ¿µ»óÀ» È­¸é¿¡ º¸¿©ÁÖ±â À§ÇÑ ´ÙÀ̾ó·Î±× ¹Ú½º°¡ ¶á´Ù. ÀÌ ´ÙÀ̾ó·Î±× ¹Ú½º¿¡´Â 'ÆÄÀϼ±ÅÃ' ¹öưÀ¸·Î ÀÐÀ» ÆÄÀÏÀ» ¿­ ¼ö ÀÖ°í, RGB¿Í DIBÆÄÀÏ Áß Çϳª¸¦ ¶óµð¿À ¹öưÀ¸·Î ¼±ÅÃÇϰí ÀÐÀ» ¿µ»óÀÇ °¡·Î, ¼¼·Î Å©±â¸¦ ÀÔ·ÂÇÑ ÈÄ '¿µ»óÀ» º¸¿©Áà' ¹öưÀ» Ŭ¸¯Çϸé À©µµ¿ì Ŭ¶óÀÌ¾ðÆ® È­¸é¿¡ ÀÐÀº ¿µ»óÀ» Ãâ·ÂÇÑ´Ù. ÇÁ·ÎÁ§Æ®¸í : "ImageView" 1. ¸Þ´º µðÀÚÀÎ '¿µ»ó º¸±â' 'RAW ¿µ»ó º¸±â' ID_RAW_IMAGE 2. ´ÙÀ̾ó·Î±× ¹Ú½º µðÀÚÀÎ : ÄÜÆ®·Ñ ¹è¿­ ¹× ¸Þ½ÃÁö ID Á¤ÇÏ±â ÆÄÀÏ À̸§ ¿¡µðÆ® IDC_EDIT_FILE 'ÆÄÀÏ ¼±ÅÃ' ¹öư IDC_BUTTON_FILE 'RGB' ¶óµð¿À ¹öư IDC_RADIO_RGB 'DIB' ¶óµð¿À ¹öư IDC_RADIO_DIB °¡·Î Å©±â ¿¡µðÆ® IDC_EDIT _X ¼¼·Î Å©±â ¿¡µðÆ® IDC_EDIT_Y '¿µ»ó º¸¿©Áà' ¹öư IDOK (default) '¾Èº¼·¡' ¹öư IDCANCEL (default) 3. ´ÙÀ̾ó·Î±× ¹Ú½º ÆÄ»ý Ŭ·¡½º Ãß°¡. : CimageViewDlg 4. ¸Þ½ÃÁö Çڵ鷯 ÇÔ¼ö ¹× ÄÁÆ®·Ñ ¸â¹ö º¯¼ö Ãß°¡. 1) ¸Þ´º ID_RAW_IMAGE OnRawImage() CImageViewDocŬ·¡½º¿¡ 2) ´ÙÀÌ·²·Î±× ¹Ú½º CImageViewDialogŬ·¡½º¿¡ IDC_EDIT_FILE CString m_strFile Max : 100ÀÚ IDC_BUTTON_FILE OnButtonFile() IDC_RADIO_RGB int m_nRGB (Group) OnRadioRgb() IDC_RADIO_DIB OnRadioDib() IDC_EDIT_X int m_nSizeX 0 ~ 1024 IDC_EDIT_Y int m_nSizeY 0 ~ 1024 5. ´ÙÀ̾ó·Î±× ¹Ú½ºÀÇ ÃʱâÈ­ ¹× ¸Þ½ÃÁö Çڵ鷯 ÇÔ¼ö¿¡ ÄÚµå Ãß°¡ CImageViewDlg::CImageViewDlg(CWnd* pParent /*=NULL*/) : CDialog(CImageViewDlg::IDD, pParent) { //{{AFX_DATA_INIT(CImageViewDlg) m_nSizeX = 256; m_nSizeY = 256; m_nRGB = 0; m_strFile = _T(""); //}}AFX_DATA_INIT } void CImageViewDlg::OnButtonFile() { // TODO: Add your control notification handler code here CFileDialog dlgFileOpen(TRUE, "*", NULL, OFN_FILEMUSTEXIST, "Raw Files(*.raw)|*.raw||", NULL); if (dlgFileOpen.DoModal() == IDOK) { m_strFile = dlgFileOpen.GetPathName(); UpdateData(FALSE); } } void CImageViewDlg::OnRadioDib() { // TODO: Add your control notification handler code here m_nRGB = 1; } void CImageViewDlg::OnRadioRgb() { // TODO: Add your control notification handler code here m_nRGB = 0; } 6. CImageViewDocŬ·¡½ºÀÇ ¸â¹ö º¯¼ö, ÇÔ¼ö ¹× ¸Þ½ÃÁö Çڵ鷯 ÇÔ¼ö¿¡ ÄÚµå Ãß°¡. 1) cpp ÆÄÀÏ¿¡ #include "ImageViewDlg.h" 2) ¸â¹öº¯¼ö Ãß°¡ - ´ÙÀ̾ó·Î±× ¹Ú½º ¸â¹öº¯¼ö °ü¸®¿ë int m_nDRGB; int m_nDsizeY; int m_nDsizeX; CString m_strDfile; -DIBÆÄÀÏ µ¥ÀÌÅÍ Ã³¸® LPSTR m_pDib; BITMAPINFO szBitmapInfo; -RGB RawÆÄÀÏ µ¥ÀÌÅÍ Ã³¸® unsigned char m_RedImage[1024][1024]; unsigned char m_GreenImage[1024][1024]; unsigned char m_BlueImage[1024][1024]; 3) ¸â¹ö ÇÔ¼ö ¹× ÄÚµå Ãß°¡. BOOL CImageViewDoc::RGB_OpenFile() { CFile file; file.Open(m_strDfile, CFile::modeRead); for(int y=0; ym_nDRGB) { case 0: for(y=0; ym_nDsizeY; y++) { for(x=0; xm_nDsizeX; x++) { pDC->SetPixel(x,y,RGB(pDoc->m_RedImage[y][x], pDoc->m_GreenImage[y][x], pDoc->m_BlueImage[y][x])); } } break; case 1: //ºñÆ®¸ÊÀ» Ãâ·ÂÇÏ´Â ¸ðµå¸¦ »ö»óÇüÅ·Π::SetStretchBltMode(pDC->m_hDC, COLORONCOLOR); //DIB¸¦ DC¿¡ Àü¼ÛÇÑ´Ù. ::SetDIBitsToDevice(pDC->m_hDC, 0, // DestX 0, // DestY pDoc->m_nDsizeX, // nDestWidth pDoc->m_nDsizeY, // nDestHeight 0, // SrcX 0, // SrcY 0, // nStartScan (WORD)pDoc->m_nDsizeY, // nNumScans pDoc->m_pDib, // lpBit &(pDoc->szBitmapInfo), // lpBitsInfo DIB_RGB_COLORS); // wUsage break; } } * Test Image girl.raw 256 x 256 barbara.raw 512 x 512 kim.raw 380 x 380