VC6.0 MFC画像オープン表示メッセージ
VC6.0
docのコンストラクション関数で2つの変数を初期化します.
m_pImage = NULL;//元の画像を格納するためのコピーm_pImageSrc = NULL;//元の画像を保存するために使用
///**********************************************************************************************************
///******************************保存画像********************************************//
ビューのコンストラクション関数でInitImage()を呼び出します.初期化
ex:
///////////////////////////////////////////////////////////////////////////////CVView drawing
私たちのコントロールがそれほど大きくない場合、つまり表示する画像>コントロールのサイズの場合、CvImageのDrawTOHDC関数を使用できます.
CvvImage::DrawToHDC void CImage::DrawToHDC(HDC hDCDst, RECT* pDstRect); 画像のROI領域をDCのpDstRectに描画します.画像サイズとpDstRectが一致しない場合、画像は伸張/圧縮されます.この関数はWindowsでのみ有効です.hDCDstデバイス記述子.pDstRect対応デバイス記述子領域.
ex:
CRect rect; SetRect( rect, 0, 0, outputRect.Width(),outputRect.Height() ); m_cvImage->DrawToHDC(GetDlgItem(IDC_ORIGIN_PIC)->GetDC()->GetSafeHdc(),&rect); //IDC_ORIGIN_PICはpictureコントロールのIDです
docのコンストラクション関数で2つの変数を初期化します.
m_pImage = NULL;//元の画像を格納するためのコピーm_pImageSrc = NULL;//元の画像を保存するために使用
///**********************************************************************************************************
BOOL CVDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;
// TODO: Add your specialized creation code here
m_sCurrFile = lpszPathName;
if( (m_pImageSrc = cvLoadImage(lpszPathName, 1)) == NULL)
return FALSE;
Load();
return TRUE;
}
void CVDoc::Load()
{
if(m_pImage != NULL)
{
cvReleaseImage(&m_pImage);
}
m_pImageSrc = cvLoadImage(m_sCurrFile, 1);
m_pImage = cvLoadImage(m_sCurrFile, 1);
CRect rect;
CFrameWnd *pFrame=(CFrameWnd*)AfxGetMainWnd();
pFrame->GetActiveView()->GetClientRect(&rect);
float y = (float)rect.Height() / m_pImageSrc->height;
float x = (float)rect.Width() / m_pImageSrc->width;
float ratio = x < y ? x: y;
if(ratio < 1)
{
ZoomEx(ratio, m_pImageSrc, &m_pImage);
}
int r = ratio > 1 ? 100 : (int)(ratio*100);
}
///******************************保存画像********************************************//
//
bool CVDoc::SaveImage(CString path)
{
if(m_pImage == NULL)
{
return false;
}
cvSaveImage(path, m_pImage);
return true;
}
ビューのコンストラクション関数でInitImage()を呼び出します.初期化
ex:
void CVView::InitImage()
{
m_iImgX = 0;
m_iImgY = 0;
m_bIsExceedX = false;
m_bIsExceedY = false;
m_bIsChange = false;
m_iPreX = -1;
m_iPreY = -1;
}
///////////////////////////////////////////////////////////////////////////////CVView drawing
void CVView::OnDraw(CDC* pDC)
{
CVDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
if(pDoc->m_pImage != NULL)
{
CvvImage img;
img.CopyOf(pDoc->m_pImage); //
int x = 0, y = 0;
CRect rect;
GetClientRect(&rect);
if(img.Width() < rect.Width()) //
{
x = rect.Width() - img.Width();
x = x / 2;
}
if(img.Height() < rect.Height())
{
y = rect.Height() - img.Height();
y = y / 2;
}
//
img.Show(pDC->m_hDC, x, y, pDoc->m_pImage->width, pDoc->m_pImage->height, m_iImgX, m_iImgY);
}
}
私たちのコントロールがそれほど大きくない場合、つまり表示する画像>コントロールのサイズの場合、CvImageのDrawTOHDC関数を使用できます.
CvvImage::DrawToHDC void CImage::DrawToHDC(HDC hDCDst, RECT* pDstRect); 画像のROI領域をDCのpDstRectに描画します.画像サイズとpDstRectが一致しない場合、画像は伸張/圧縮されます.この関数はWindowsでのみ有効です.hDCDstデバイス記述子.pDstRect対応デバイス記述子領域.
ex:
CRect rect; SetRect( rect, 0, 0, outputRect.Width(),outputRect.Height() ); m_cvImage->DrawToHDC(GetDlgItem(IDC_ORIGIN_PIC)->GetDC()->GetSafeHdc(),&rect); //IDC_ORIGIN_PICはpictureコントロールのIDです