MFC多文档中opencv处理图像打开、保存
2016-04-10 14:15
597 查看
需要在C**Doc和C**View中进行相应修改
图像打开:
Doc.cpp中:
[cpp] view plain copy
BOOL CCVMFCDoc::Load(IplImage** pp, LPCTSTR csFilename)
{
IplImage* pImg=NULL;
pImg = cvLoadImage(csFilename,-1); // 读图像文件(DSCV)
if (!pImg) return(false);
cvFlip(pImg); // 与 DIB 像素结构一致
if (*pp) {
cvReleaseImage(pp);
}
(*pp)=pImg;
m_Display=0;
return(true);
}
[cpp] view plain copy
BOOL CCVMFCDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if(!CDocument::OnOpenDocument(lpszPathName)) return false;
Load(&pImg,lpszPathName);
if(pImg) return true;
return false;
}
图像保存:
1.Doc.cpp中
[cpp] view plain copy
BOOL CCVMFCDoc::Save(LPCTSTR csFilename, IplImage* pImg)
{
int bl;
cvFlip(pImg); // 恢复原 OpenCV 位图结构
bl=cvSaveImage(csFilename,pImg); // 图像存盘
return(bl);
}
2.View.cpp中
[cpp] view plain copy
void CCVMFCView::OnFileSaveAs()//图像保存
{
CFileDialog dlg(false,"*.bmp","Test.bmp",OFN_HIDEREADONLY |OFN_OVERWRITEPROMPT,"保存为(*.bmp)|*.bmp|所有文件(*.*)|*.*||");
CString strPath("");
if(dlg.DoModal()==IDOK)
{
cvFlip(workImg);
strPath=dlg.GetPathName();
cvSaveImage(strPath,workImg);
cvFlip(workImg);
}
}
整体代码如下:
[cpp] view plain copy
// CVMFCDoc.h : CCVMFCDoc 类的接口
//@Author:ZrqSophia
//@2012-3-2
#pragma once
class CCVMFCDoc : public CDocument
{
protected: // 仅从序列化创建
CCVMFCDoc();
DECLARE_DYNCREATE(CCVMFCDoc)
// 属性
public:
// 操作
public:
// 重写
public:
virtual BOOL OnNewDocument();
virtual void Serialize(CArchive& ar);
// 实现
public:
virtual ~CCVMFCDoc();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
protected:
// 生成的消息映射函数
protected:
DECLARE_MESSAGE_MAP()
public:
IplImage* pImg;
int m_Display;
BOOL Load(IplImage** pp, LPCTSTR csFilename);
BOOL Save(LPCTSTR csFilename, IplImage* pImg);
BOOL OnOpenDocument(LPCTSTR lpszPathName);
};
[cpp] view plain copy
// CVMFCDoc.cpp : CCVMFCDoc 类的实现
//Author:ZrqSophia
//2012-3-2
#include "stdafx.h"
#include "CVMFC.h"
#include "CVMFCDoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CCVMFCDoc
IMPLEMENT_DYNCREATE(CCVMFCDoc, CDocument)
BEGIN_MESSAGE_MAP(CCVMFCDoc, CDocument)
END_MESSAGE_MAP()
// CCVMFCDoc 构造/析构
CCVMFCDoc::CCVMFCDoc()
: pImg(NULL)
, m_Display(0)
{
// TODO: 在此添加一次性构造代码
}
CCVMFCDoc::~CCVMFCDoc()
{
}
BOOL CCVMFCDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: 在此添加重新初始化代码
// (SDI 文档将重用该文档)
return TRUE;
}
// CCVMFCDoc 序列化
void CCVMFCDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: 在此添加存储代码
}
else
{
// TODO: 在此添加加载代码
}
}
// CCVMFCDoc 诊断
#ifdef _DEBUG
void CCVMFCDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CCVMFCDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
// CCVMFCDoc 命令
BOOL CCVMFCDoc::Load(IplImage** pp, LPCTSTR csFilename)
{
IplImage* pImg=NULL;
pImg = cvLoadImage(csFilename,-1); // 读图像文件(DSCV)
if (!pImg) return(false);
cvFlip(pImg); // 与 DIB 像素结构一致
if (*pp) {
cvReleaseImage(pp);
}
(*pp)=pImg;
m_Display=0;
return(true);
}
BOOL CCVMFCDoc::Save(LPCTSTR csFilename, IplImage* pImg)
{
int bl;
cvFlip(pImg); // 恢复原 OpenCV 位图结构
bl=cvSaveImage(csFilename,pImg); // 图像存盘
return(bl);
}
BOOL CCVMFCDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if(!CDocument::OnOpenDocument(lpszPathName)) return false;
Load(&pImg,lpszPathName);
if(pImg) return true;
return false;
}
[cpp] view plain copy
// CVMFCView.h : CCVMFCView 类的接口
//@Author:Zrqsophia
//@2012-3-2
#pragma once
class CCVMFCView : public CScrollView
{
protected: // 仅从序列化创建
CCVMFCView();
DECLARE_DYNCREATE(CCVMFCView)
// 属性
public:
CCVMFCDoc* GetDocument() const;
// 操作
public:
// 重写
public:
virtual void OnDraw(CDC* pDC); // 重写以绘制该视图
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
// 实现
public:
virtual ~CCVMFCView();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
protected:
IplImage* saveImg;
IplImage* workImg;
LPBITMAPINFO m_lpBmi;
int m_CaptFlag;
int m_dibFlag;
int m_SaveFlag;
int m_ImageType;
// 生成的消息映射函数
protected:
afx_msg void OnFilePrintPreview();
afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
DECLARE_MESSAGE_MAP()
public:
virtual void OnInitialUpdate();
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnFileSaveAs();
afx_msg void OnColorImageRefresh();
};
#ifndef _DEBUG // CVMFCView.cpp 中的调试版本
inline CCVMFCDoc* CCVMFCView::GetDocument() const
{ return reinterpret_cast<CCVMFCDoc*>(m_pDocument); }
#endif
[cpp] view plain copy
// CVMFCView.cpp : CCVMFCView 类的实现
//@Author:ZrqSophia
//@2012-3-2
#include "stdafx.h"
#include "CVMFC.h"
#include "CVMFCDoc.h"
#include "CVMFCView.h"
#include "resource.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CCVMFCView
IMPLEMENT_DYNCREATE(CCVMFCView, CScrollView)
BEGIN_MESSAGE_MAP(CCVMFCView, CScrollView)
// 标准打印命令
ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
ON_WM_SIZE()
ON_COMMAND(ID_FILE_SAVE_AS, &CCVMFCView::OnFileSaveAs)
ON_COMMAND(ID_COLOR_IMAGE_REFRESH, &CCVMFCView::OnColorImageRefresh)
END_MESSAGE_MAP()
// CCVMFCView 构造/析构
CFile fCapture;
CFileException eCapture;
char pbuf[20];
int captSetFlag=0;
CCVMFCView::CCVMFCView()
{
// TODO: 在此处添加构造代码
saveImg = NULL;
workImg = NULL;
m_lpBmi = 0;
m_CaptFlag = 0;
m_dibFlag = 0;
m_ImageType= 0;
CSize sizeTotal;
sizeTotal.cx = sizeTotal.cy = 100;
SetScrollSizes(MM_TEXT, sizeTotal);
}
CCVMFCView::~CCVMFCView()
{
if (saveImg)
cvReleaseImage(&saveImg); // 释放位图
if (workImg)
cvReleaseImage(&workImg);
if (m_lpBmi)
free(m_lpBmi); // 释放位图信息
}
BOOL CCVMFCView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此处通过修改
// CREATESTRUCT cs 来修改窗口类或样式
return CScrollView::PreCreateWindow(cs);
}
// CCVMFCView 绘制
void CCVMFCView::OnDraw(CDC* pDC)
{
CCVMFCDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
if(pDoc->pImg)
{
if(pDoc->m_Display==0)
{
imageClone(pDoc->pImg,&saveImg);
m_dibFlag=imageClone(saveImg,&workImg);
m_ImageType=imageType(workImg);
m_SaveFlag=m_ImageType;
pDoc->m_Display=1;
}
}
if (m_dibFlag) { // DIB 结构改变
if (m_lpBmi)
free(m_lpBmi);
m_lpBmi=CtreateMapInfo(workImg,m_dibFlag);
m_dibFlag=0;
CSize sizeTotal;
sizeTotal=CSize(workImg->width,workImg->height);
SetScrollSizes(MM_TEXT,sizeTotal);
}
char* pBits;
if(workImg)
pBits=workImg->imageData;
if(workImg)
StretchDIBits(pDC->m_hDC,
0,0,workImg->width,workImg->height,
0,0,workImg->width,workImg->height,
pBits,m_lpBmi,DIB_RGB_COLORS,SRCCOPY);
}
// CCVMFCView 打印
void CCVMFCView::OnFilePrintPreview()
{
AFXPrintPreview(this);
}
BOOL CCVMFCView::OnPreparePrinting(CPrintInfo* pInfo)
{
// 默认准备
return DoPreparePrinting(pInfo);
}
void CCVMFCView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 添加额外的打印前进行的初始化过程
}
void CCVMFCView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 添加打印后进行的清理过程
}
void CCVMFCView::OnRButtonUp(UINT nFlags, CPoint point)
{
ClientToScreen(&point);
OnContextMenu(this, point);
}
void CCVMFCView::OnContextMenu(CWnd* pWnd, CPoint point)
{
theApp.GetContextMenuManager()->ShowPopupMenu(IDR_POPUP_EDIT, point.x, point.y, this, TRUE);
}
// CCVMFCView 诊断
#ifdef _DEBUG
void CCVMFCView::AssertValid() const
{
CScrollView::AssertValid();
}
void CCVMFCView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CCVMFCDoc* CCVMFCView::GetDocument() const // 非调试版本是内联的
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CCVMFCDoc)));
return (CCVMFCDoc*)m_pDocument;
}
#endif //_DEBUG
// CCVMFCView 消息处理程序
void CCVMFCView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CSize sizeTotal;
// TODO: calculate the total size of this view
sizeTotal.cx = sizeTotal.cy = 100;
SetScrollSizes(MM_TEXT, sizeTotal);
}
void CCVMFCView::OnSize(UINT nType, int cx, int cy)
{
CScrollView::OnSize(nType, cx, cy);
if (workImg) { // 刷新窗口画面
CSize sizeTotal;
sizeTotal = CSize(workImg->width,workImg->height);
SetScrollSizes(MM_TEXT, sizeTotal); // 设置滚动条
}
}
void CCVMFCView::OnFileSaveAs()
{
CFileDialog dlg(false,"*.bmp","Test.bmp",OFN_HIDEREADONLY |OFN_OVERWRITEPROMPT,"保存为(*.bmp)|*.bmp|所有文件(*.*)|*.*||");
CString strPath("");
if(dlg.DoModal()==IDOK)
{
cvFlip(workImg);
strPath=dlg.GetPathName();
cvSaveImage(strPath,workImg);
cvFlip(workImg);
}
}
void CCVMFCView::OnColorImageRefresh()
{
CCVMFCDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDoc->m_Display=0;
Invalidate();
}
//from: http://blog.csdn.net/abcjennifer/article/details/7313711
图像打开:
Doc.cpp中:
[cpp] view plain copy
BOOL CCVMFCDoc::Load(IplImage** pp, LPCTSTR csFilename)
{
IplImage* pImg=NULL;
pImg = cvLoadImage(csFilename,-1); // 读图像文件(DSCV)
if (!pImg) return(false);
cvFlip(pImg); // 与 DIB 像素结构一致
if (*pp) {
cvReleaseImage(pp);
}
(*pp)=pImg;
m_Display=0;
return(true);
}
[cpp] view plain copy
BOOL CCVMFCDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if(!CDocument::OnOpenDocument(lpszPathName)) return false;
Load(&pImg,lpszPathName);
if(pImg) return true;
return false;
}
图像保存:
1.Doc.cpp中
[cpp] view plain copy
BOOL CCVMFCDoc::Save(LPCTSTR csFilename, IplImage* pImg)
{
int bl;
cvFlip(pImg); // 恢复原 OpenCV 位图结构
bl=cvSaveImage(csFilename,pImg); // 图像存盘
return(bl);
}
2.View.cpp中
[cpp] view plain copy
void CCVMFCView::OnFileSaveAs()//图像保存
{
CFileDialog dlg(false,"*.bmp","Test.bmp",OFN_HIDEREADONLY |OFN_OVERWRITEPROMPT,"保存为(*.bmp)|*.bmp|所有文件(*.*)|*.*||");
CString strPath("");
if(dlg.DoModal()==IDOK)
{
cvFlip(workImg);
strPath=dlg.GetPathName();
cvSaveImage(strPath,workImg);
cvFlip(workImg);
}
}
整体代码如下:
[cpp] view plain copy
// CVMFCDoc.h : CCVMFCDoc 类的接口
//@Author:ZrqSophia
//@2012-3-2
#pragma once
class CCVMFCDoc : public CDocument
{
protected: // 仅从序列化创建
CCVMFCDoc();
DECLARE_DYNCREATE(CCVMFCDoc)
// 属性
public:
// 操作
public:
// 重写
public:
virtual BOOL OnNewDocument();
virtual void Serialize(CArchive& ar);
// 实现
public:
virtual ~CCVMFCDoc();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
protected:
// 生成的消息映射函数
protected:
DECLARE_MESSAGE_MAP()
public:
IplImage* pImg;
int m_Display;
BOOL Load(IplImage** pp, LPCTSTR csFilename);
BOOL Save(LPCTSTR csFilename, IplImage* pImg);
BOOL OnOpenDocument(LPCTSTR lpszPathName);
};
[cpp] view plain copy
// CVMFCDoc.cpp : CCVMFCDoc 类的实现
//Author:ZrqSophia
//2012-3-2
#include "stdafx.h"
#include "CVMFC.h"
#include "CVMFCDoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CCVMFCDoc
IMPLEMENT_DYNCREATE(CCVMFCDoc, CDocument)
BEGIN_MESSAGE_MAP(CCVMFCDoc, CDocument)
END_MESSAGE_MAP()
// CCVMFCDoc 构造/析构
CCVMFCDoc::CCVMFCDoc()
: pImg(NULL)
, m_Display(0)
{
// TODO: 在此添加一次性构造代码
}
CCVMFCDoc::~CCVMFCDoc()
{
}
BOOL CCVMFCDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: 在此添加重新初始化代码
// (SDI 文档将重用该文档)
return TRUE;
}
// CCVMFCDoc 序列化
void CCVMFCDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: 在此添加存储代码
}
else
{
// TODO: 在此添加加载代码
}
}
// CCVMFCDoc 诊断
#ifdef _DEBUG
void CCVMFCDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CCVMFCDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
// CCVMFCDoc 命令
BOOL CCVMFCDoc::Load(IplImage** pp, LPCTSTR csFilename)
{
IplImage* pImg=NULL;
pImg = cvLoadImage(csFilename,-1); // 读图像文件(DSCV)
if (!pImg) return(false);
cvFlip(pImg); // 与 DIB 像素结构一致
if (*pp) {
cvReleaseImage(pp);
}
(*pp)=pImg;
m_Display=0;
return(true);
}
BOOL CCVMFCDoc::Save(LPCTSTR csFilename, IplImage* pImg)
{
int bl;
cvFlip(pImg); // 恢复原 OpenCV 位图结构
bl=cvSaveImage(csFilename,pImg); // 图像存盘
return(bl);
}
BOOL CCVMFCDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if(!CDocument::OnOpenDocument(lpszPathName)) return false;
Load(&pImg,lpszPathName);
if(pImg) return true;
return false;
}
[cpp] view plain copy
// CVMFCView.h : CCVMFCView 类的接口
//@Author:Zrqsophia
//@2012-3-2
#pragma once
class CCVMFCView : public CScrollView
{
protected: // 仅从序列化创建
CCVMFCView();
DECLARE_DYNCREATE(CCVMFCView)
// 属性
public:
CCVMFCDoc* GetDocument() const;
// 操作
public:
// 重写
public:
virtual void OnDraw(CDC* pDC); // 重写以绘制该视图
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
// 实现
public:
virtual ~CCVMFCView();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
protected:
IplImage* saveImg;
IplImage* workImg;
LPBITMAPINFO m_lpBmi;
int m_CaptFlag;
int m_dibFlag;
int m_SaveFlag;
int m_ImageType;
// 生成的消息映射函数
protected:
afx_msg void OnFilePrintPreview();
afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);
DECLARE_MESSAGE_MAP()
public:
virtual void OnInitialUpdate();
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnFileSaveAs();
afx_msg void OnColorImageRefresh();
};
#ifndef _DEBUG // CVMFCView.cpp 中的调试版本
inline CCVMFCDoc* CCVMFCView::GetDocument() const
{ return reinterpret_cast<CCVMFCDoc*>(m_pDocument); }
#endif
[cpp] view plain copy
// CVMFCView.cpp : CCVMFCView 类的实现
//@Author:ZrqSophia
//@2012-3-2
#include "stdafx.h"
#include "CVMFC.h"
#include "CVMFCDoc.h"
#include "CVMFCView.h"
#include "resource.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CCVMFCView
IMPLEMENT_DYNCREATE(CCVMFCView, CScrollView)
BEGIN_MESSAGE_MAP(CCVMFCView, CScrollView)
// 标准打印命令
ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
ON_WM_SIZE()
ON_COMMAND(ID_FILE_SAVE_AS, &CCVMFCView::OnFileSaveAs)
ON_COMMAND(ID_COLOR_IMAGE_REFRESH, &CCVMFCView::OnColorImageRefresh)
END_MESSAGE_MAP()
// CCVMFCView 构造/析构
CFile fCapture;
CFileException eCapture;
char pbuf[20];
int captSetFlag=0;
CCVMFCView::CCVMFCView()
{
// TODO: 在此处添加构造代码
saveImg = NULL;
workImg = NULL;
m_lpBmi = 0;
m_CaptFlag = 0;
m_dibFlag = 0;
m_ImageType= 0;
CSize sizeTotal;
sizeTotal.cx = sizeTotal.cy = 100;
SetScrollSizes(MM_TEXT, sizeTotal);
}
CCVMFCView::~CCVMFCView()
{
if (saveImg)
cvReleaseImage(&saveImg); // 释放位图
if (workImg)
cvReleaseImage(&workImg);
if (m_lpBmi)
free(m_lpBmi); // 释放位图信息
}
BOOL CCVMFCView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此处通过修改
// CREATESTRUCT cs 来修改窗口类或样式
return CScrollView::PreCreateWindow(cs);
}
// CCVMFCView 绘制
void CCVMFCView::OnDraw(CDC* pDC)
{
CCVMFCDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
if(pDoc->pImg)
{
if(pDoc->m_Display==0)
{
imageClone(pDoc->pImg,&saveImg);
m_dibFlag=imageClone(saveImg,&workImg);
m_ImageType=imageType(workImg);
m_SaveFlag=m_ImageType;
pDoc->m_Display=1;
}
}
if (m_dibFlag) { // DIB 结构改变
if (m_lpBmi)
free(m_lpBmi);
m_lpBmi=CtreateMapInfo(workImg,m_dibFlag);
m_dibFlag=0;
CSize sizeTotal;
sizeTotal=CSize(workImg->width,workImg->height);
SetScrollSizes(MM_TEXT,sizeTotal);
}
char* pBits;
if(workImg)
pBits=workImg->imageData;
if(workImg)
StretchDIBits(pDC->m_hDC,
0,0,workImg->width,workImg->height,
0,0,workImg->width,workImg->height,
pBits,m_lpBmi,DIB_RGB_COLORS,SRCCOPY);
}
// CCVMFCView 打印
void CCVMFCView::OnFilePrintPreview()
{
AFXPrintPreview(this);
}
BOOL CCVMFCView::OnPreparePrinting(CPrintInfo* pInfo)
{
// 默认准备
return DoPreparePrinting(pInfo);
}
void CCVMFCView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 添加额外的打印前进行的初始化过程
}
void CCVMFCView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 添加打印后进行的清理过程
}
void CCVMFCView::OnRButtonUp(UINT nFlags, CPoint point)
{
ClientToScreen(&point);
OnContextMenu(this, point);
}
void CCVMFCView::OnContextMenu(CWnd* pWnd, CPoint point)
{
theApp.GetContextMenuManager()->ShowPopupMenu(IDR_POPUP_EDIT, point.x, point.y, this, TRUE);
}
// CCVMFCView 诊断
#ifdef _DEBUG
void CCVMFCView::AssertValid() const
{
CScrollView::AssertValid();
}
void CCVMFCView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CCVMFCDoc* CCVMFCView::GetDocument() const // 非调试版本是内联的
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CCVMFCDoc)));
return (CCVMFCDoc*)m_pDocument;
}
#endif //_DEBUG
// CCVMFCView 消息处理程序
void CCVMFCView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CSize sizeTotal;
// TODO: calculate the total size of this view
sizeTotal.cx = sizeTotal.cy = 100;
SetScrollSizes(MM_TEXT, sizeTotal);
}
void CCVMFCView::OnSize(UINT nType, int cx, int cy)
{
CScrollView::OnSize(nType, cx, cy);
if (workImg) { // 刷新窗口画面
CSize sizeTotal;
sizeTotal = CSize(workImg->width,workImg->height);
SetScrollSizes(MM_TEXT, sizeTotal); // 设置滚动条
}
}
void CCVMFCView::OnFileSaveAs()
{
CFileDialog dlg(false,"*.bmp","Test.bmp",OFN_HIDEREADONLY |OFN_OVERWRITEPROMPT,"保存为(*.bmp)|*.bmp|所有文件(*.*)|*.*||");
CString strPath("");
if(dlg.DoModal()==IDOK)
{
cvFlip(workImg);
strPath=dlg.GetPathName();
cvSaveImage(strPath,workImg);
cvFlip(workImg);
}
}
void CCVMFCView::OnColorImageRefresh()
{
CCVMFCDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDoc->m_Display=0;
Invalidate();
}
//from: http://blog.csdn.net/abcjennifer/article/details/7313711
相关文章推荐
- linux上ln命令详细说明
- Hadoop学习(二) — Hadoop2.4伪分布式的安装与测试
- opencv实现图像邻域均值滤波、中值滤波、高斯滤波
- MFC+OPENCV实现角点检测
- opencv实现分水岭算法
- opencv绘制灰度直方图
- opencv 图像阴影检测
- opencv 中 快速傅里叶变换 FFT
- centos系统yum安装mysql
- opencv求取RGB分量
- OpenCV中 CvArr、Mat、CvMat、IplImage、BYTE转换(总结而来)
- opencv中的矩阵操作
- 三维高斯模型 opencv实现
- Apache James邮件服务器介绍及配置发送外网邮件
- opencv 画延长线
- shell脚本学习1
- Opencv基本操作
- LInux中VIM的使用和定制
- Linux 工程编译调试Makefile及技巧
- Linux用户和用户组