openCV 对话框 显示图像

来源:互联网 发布:c语言模块化编程pdf 编辑:程序博客网 时间:2024/04/28 16:57
// CVDlgReadDlg.h : 头文件//#pragma once#include <opencv2/opencv.hpp>#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <iostream>using namespace std;using namespace cv;// CCVDlgReadDlg 对话框class CCVDlgReadDlg : public CDialog{// 构造public:CCVDlgReadDlg(CWnd* pParent = NULL);// 标准构造函数~CCVDlgReadDlg();int imageClone(IplImage* pi, IplImage** ppo); int imageType(IplImage* p); LPBITMAPINFO CtreateMapInfo(IplImage* workImg,int flag);BOOL CCVDlgReadDlg::Save(LPCTSTR csFileName, IplImage* m_pImg);BOOL Load(IplImage* srcImg, LPCTSTR csFileName);string CStringTostring(CString str);// 对话框数据enum { IDD = IDD_CVDLGREAD_DIALOG };protected:virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV 支持// 实现protected:HICON m_hIcon;// 生成的消息映射函数virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();DECLARE_MESSAGE_MAP()public:afx_msg void OnBnClickedOpenImage();afx_msg void OnBnClickedSave();public:Mat m_srcImg;IplImage*m_pImg;IplImage*m_pImgSrcToSave;IplImage* saveImg;IplImage* workImg;LPBITMAPINFO m_lpBmi;intm_Display;int     m_dibFlag;int     m_SaveFlag;int     m_ImageType;CString m_csFileName;};


 

// CVDlgReadDlg.cpp : 实现文件//#include "stdafx.h"#include "CVDlgRead.h"#include "CVDlgReadDlg.h"#include "afxdialogex.h"#ifdef _DEBUG#define new DEBUG_NEW#endif//---------------------------------------------------------//  VGA 256色默认调色板数据RGBQUAD VgaDefPal[256] = {{0x00,0x00,0x00,0x00},{0xa8,0x00,0x00,0x00},{0x00,0xa8,0x00,0x00},{0xa8,0xa8,0x00,0x00},{0x00,0x00,0xa8,0x00},{0xa8,0x00,0xa8,0x00},{0x00,0x54,0xa8,0x00},{0xa8,0xa8,0xa8,0x00},{0x54,0x54,0x54,0x00},{0xfc,0x54,0x54,0x00},{0x54,0xfc,0x54,0x00},{0xfc,0xfc,0x54,0x00},{0x54,0x54,0xfc,0x00},{0xfc,0x54,0xfc,0x00},{0x54,0xfc,0xfc,0x00},{0xfc,0xfc,0xfc,0x00},{0x00,0x00,0x00,0x00},{0x14,0x14,0x14,0x00},{0x20,0x20,0x20,0x00},{0x2c,0x2c,0x2c,0x00},{0x38,0x38,0x38,0x00},{0x44,0x44,0x44,0x00},{0x50,0x50,0x50,0x00},{0x60,0x60,0x60,0x00},{0x70,0x70,0x70,0x00},{0x80,0x80,0x80,0x00},{0x90,0x90,0x90,0x00},{0xa0,0xa0,0xa0,0x00},{0xb4,0xb4,0xb4,0x00},{0xc8,0xc8,0xc8,0x00},{0xe0,0xe0,0xe0,0x00},{0xfc,0xfc,0xfc,0x00},{0xfc,0x00,0x00,0x00},{0xfc,0x00,0x40,0x00},{0xfc,0x00,0x7c,0x00},{0xfc,0x00,0xbc,0x00},{0xfc,0x00,0xfc,0x00},{0xbc,0x00,0xfc,0x00},{0x7c,0x00,0xfc,0x00},{0x40,0x00,0xfc,0x00},{0x00,0x00,0xfc,0x00},{0x00,0x40,0xfc,0x00},{0x00,0x7c,0xfc,0x00},{0x00,0xbc,0xfc,0x00},{0x00,0xfc,0xfc,0x00},{0x00,0xfc,0xbc,0x00},{0x00,0xfc,0x7c,0x00},{0x00,0xfc,0x40,0x00},{0x00,0xfc,0x00,0x00},{0x40,0xfc,0x00,0x00},{0x7c,0xfc,0x00,0x00},{0xbc,0xfc,0x00,0x00},{0xfc,0xfc,0x00,0x00},{0xfc,0xbc,0x00,0x00},{0xfc,0x7c,0x00,0x00},{0xfc,0x40,0x00,0x00},{0xfc,0x7c,0x7c,0x00},{0xfc,0x7c,0x9c,0x00},{0xfc,0x7c,0xbc,0x00},{0xfc,0x7c,0xdc,0x00},{0xfc,0x7c,0xfc,0x00},{0xdc,0x7c,0xfc,0x00},{0xbc,0x7c,0xfc,0x00},{0x9c,0x7c,0xfc,0x00},{0x7c,0x7c,0xfc,0x00},{0x7c,0x9c,0xfc,0x00},{0x7c,0xbc,0xfc,0x00},{0x7c,0xdc,0xfc,0x00},{0x7c,0xfc,0xfc,0x00},{0x7c,0xfc,0xdc,0x00},{0x7c,0xfc,0xbc,0x00},{0x7c,0xfc,0x9c,0x00},{0x7c,0xfc,0x7c,0x00},{0x9c,0xfc,0x7c,0x00},{0xbc,0xfc,0x7c,0x00},{0xdc,0xfc,0x7c,0x00},{0xfc,0xfc,0x7c,0x00},{0xfc,0xdc,0x7c,0x00},{0xfc,0xbc,0x7c,0x00},{0xfc,0x9c,0x7c,0x00},{0xfc,0xb4,0xb4,0x00},{0xfc,0xb4,0xc4,0x00},{0xfc,0xb4,0xd8,0x00},{0xfc,0xb4,0xe8,0x00},{0xfc,0xb4,0xfc,0x00},{0xe8,0xb4,0xfc,0x00},{0xd8,0xb4,0xfc,0x00},{0xc4,0xb4,0xfc,0x00},{0xb4,0xb4,0xfc,0x00},{0xb4,0xc4,0xfc,0x00},{0xb4,0xd8,0xfc,0x00},{0xb4,0xe8,0xfc,0x00},{0xb4,0xfc,0xfc,0x00},{0xb4,0xfc,0xe8,0x00},{0xb4,0xfc,0xd8,0x00},{0xb4,0xfc,0xc4,0x00},{0xb4,0xfc,0xb4,0x00},{0xc4,0xfc,0xb4,0x00},{0xd8,0xfc,0xb4,0x00},{0xe8,0xfc,0xb4,0x00},{0xfc,0xfc,0xb4,0x00},{0xfc,0xe8,0xb4,0x00},{0xfc,0xd8,0xb4,0x00},{0xfc,0xc4,0xb4,0x00},{0x70,0x00,0x00,0x00},{0x70,0x00,0x1c,0x00},{0x70,0x00,0x38,0x00},{0x70,0x00,0x54,0x00},{0x70,0x00,0x70,0x00},{0x54,0x00,0x70,0x00},{0x38,0x00,0x70,0x00},{0x1c,0x00,0x70,0x00},{0x00,0x00,0x70,0x00},{0x00,0x1c,0x70,0x00},{0x00,0x38,0x70,0x00},{0x00,0x54,0x70,0x00},{0x00,0x70,0x70,0x00},{0x00,0x70,0x54,0x00},{0x00,0x70,0x38,0x00},{0x00,0x70,0x1c,0x00},{0x00,0x70,0x00,0x00},{0x1c,0x70,0x00,0x00},{0x38,0x70,0x00,0x00},{0x54,0x70,0x00,0x00},{0x70,0x70,0x00,0x00},{0x70,0x54,0x00,0x00},{0x70,0x38,0x00,0x00},{0x70,0x1c,0x00,0x00},{0x70,0x38,0x38,0x00},{0x70,0x38,0x44,0x00},{0x70,0x38,0x54,0x00},{0x70,0x38,0x60,0x00},{0x70,0x38,0x70,0x00},{0x60,0x38,0x70,0x00},{0x54,0x38,0x70,0x00},{0x44,0x38,0x70,0x00},{0x38,0x38,0x70,0x00},{0x38,0x44,0x70,0x00},{0x38,0x54,0x70,0x00},{0x38,0x60,0x70,0x00},{0x38,0x70,0x70,0x00},{0x38,0x70,0x60,0x00},{0x38,0x70,0x54,0x00},{0x38,0x70,0x44,0x00},{0x38,0x70,0x38,0x00},{0x44,0x70,0x38,0x00},{0x54,0x70,0x38,0x00},{0x60,0x70,0x38,0x00},{0x70,0x70,0x38,0x00},{0x70,0x60,0x38,0x00},{0x70,0x54,0x38,0x00},{0x70,0x44,0x38,0x00},{0x70,0x50,0x50,0x00},{0x70,0x50,0x58,0x00},{0x70,0x50,0x60,0x00},{0x70,0x50,0x68,0x00},{0x70,0x50,0x70,0x00},{0x68,0x50,0x70,0x00},{0x60,0x50,0x70,0x00},{0x58,0x50,0x70,0x00},{0x50,0x50,0x70,0x00},{0x50,0x58,0x70,0x00},{0x50,0x60,0x70,0x00},{0x50,0x68,0x70,0x00},{0x50,0x70,0x70,0x00},{0x50,0x70,0x68,0x00},{0x50,0x70,0x60,0x00},{0x50,0x70,0x58,0x00},{0x50,0x70,0x50,0x00},{0x58,0x70,0x50,0x00},{0x60,0x70,0x50,0x00},{0x68,0x70,0x50,0x00},{0x70,0x70,0x50,0x00},{0x70,0x68,0x50,0x00},{0x70,0x60,0x50,0x00},{0x70,0x58,0x50,0x00},{0x40,0x00,0x00,0x00},{0x40,0x00,0x10,0x00},{0x40,0x00,0x20,0x00},{0x40,0x00,0x30,0x00},{0x40,0x00,0x40,0x00},{0x30,0x00,0x40,0x00},{0x20,0x00,0x40,0x00},{0x10,0x00,0x40,0x00},{0x00,0x00,0x40,0x00},{0x00,0x10,0x40,0x00},{0x00,0x20,0x40,0x00},{0x00,0x30,0x40,0x00},{0x00,0x40,0x40,0x00},{0x00,0x40,0x30,0x00},{0x00,0x40,0x20,0x00},{0x00,0x40,0x10,0x00},{0x00,0x40,0x00,0x00},{0x10,0x40,0x00,0x00},{0x20,0x40,0x00,0x00},{0x30,0x40,0x00,0x00},{0x40,0x40,0x00,0x00},{0x40,0x30,0x00,0x00},{0x40,0x20,0x00,0x00},{0x40,0x10,0x00,0x00},{0x40,0x20,0x20,0x00},{0x40,0x20,0x28,0x00},{0x40,0x20,0x30,0x00},{0x40,0x20,0x38,0x00},{0x40,0x20,0x40,0x00},{0x38,0x20,0x40,0x00},{0x30,0x20,0x40,0x00},{0x28,0x20,0x40,0x00},{0x20,0x20,0x40,0x00},{0x20,0x28,0x40,0x00},{0x20,0x30,0x40,0x00},{0x20,0x38,0x40,0x00},{0x20,0x40,0x40,0x00},{0x20,0x40,0x38,0x00},{0x20,0x40,0x30,0x00},{0x20,0x40,0x28,0x00},{0x20,0x40,0x20,0x00},{0x28,0x40,0x20,0x00},{0x30,0x40,0x20,0x00},{0x38,0x40,0x20,0x00},{0x40,0x40,0x20,0x00},{0x40,0x38,0x20,0x00},{0x40,0x30,0x20,0x00},{0x40,0x28,0x20,0x00},{0x40,0x2c,0x2c,0x00},{0x40,0x2c,0x30,0x00},{0x40,0x2c,0x34,0x00},{0x40,0x2c,0x3c,0x00},{0x40,0x2c,0x40,0x00},{0x3c,0x2c,0x40,0x00},{0x34,0x2c,0x40,0x00},{0x30,0x2c,0x40,0x00},{0x2c,0x2c,0x40,0x00},{0x2c,0x30,0x40,0x00},{0x2c,0x34,0x40,0x00},{0x2c,0x3c,0x40,0x00},{0x2c,0x40,0x40,0x00},{0x2c,0x40,0x3c,0x00},{0x2c,0x40,0x34,0x00},{0x2c,0x40,0x30,0x00},{0x2c,0x40,0x2c,0x00},{0x30,0x40,0x2c,0x00},{0x34,0x40,0x2c,0x00},{0x3c,0x40,0x2c,0x00},{0x40,0x40,0x2c,0x00},{0x40,0x3c,0x2c,0x00},{0x40,0x34,0x2c,0x00},{0x40,0x30,0x2c,0x00},{0xa8,0xa8,0xa8,0x00},{0x54,0xfc,0xfc,0x00},{0xfc,0x54,0xfc,0x00},{0xfc,0xfc,0x54,0x00},{0xfc,0x54,0x54,0x00},{0x54,0xfc,0x54,0x00},{0x54,0x54,0xfc,0x00},{0xfc,0xfc,0xfc,0x00}  };RGBQUAD  VgaColorTab[256];// 用于应用程序“关于”菜单项的 CAboutDlg 对话框class CAboutDlg : public CDialogEx{public:CAboutDlg();// 对话框数据enum { IDD = IDD_ABOUTBOX };protected:virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持// 实现protected:DECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD){}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialogEx::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)END_MESSAGE_MAP()// CCVDlgReadDlg 对话框CCVDlgReadDlg::CCVDlgReadDlg(CWnd* pParent /*=NULL*/): CDialog(CCVDlgReadDlg::IDD, pParent){m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);m_pImg = NULL;m_pImgSrcToSave = NULL;saveImg    = NULL;workImg    = NULL;m_lpBmi    = 0;m_dibFlag  = 0;m_ImageType= 0;m_csFileName = "";m_Display = -1;}CCVDlgReadDlg::~CCVDlgReadDlg(){if (saveImg)cvReleaseImage(&saveImg);           //  释放位图if (workImg)cvReleaseImage(&workImg);if (m_lpBmi)free(m_lpBmi);                      //  释放位图信息}void CCVDlgReadDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CCVDlgReadDlg, CDialog)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_OPEN_IMAGE, &CCVDlgReadDlg::OnBnClickedOpenImage)ON_BN_CLICKED(IDC_SAVE, &CCVDlgReadDlg::OnBnClickedSave)END_MESSAGE_MAP()// CCVDlgReadDlg 消息处理程序BOOL CCVDlgReadDlg::OnInitDialog(){CDialog::OnInitDialog();// 将“关于...”菜单项添加到系统菜单中。// IDM_ABOUTBOX 必须在系统命令范围内。ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){BOOL bNameValid;CString strAboutMenu;bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);ASSERT(bNameValid);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动//  执行此操作SetIcon(m_hIcon, TRUE);// 设置大图标SetIcon(m_hIcon, FALSE);// 设置小图标// TODO: 在此添加额外的初始化代码return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE}void CCVDlgReadDlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID, lParam);}}// 如果向对话框添加最小化按钮,则需要下面的代码//  来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,//  这将由框架自动完成。void CCVDlgReadDlg::OnPaint(){CPaintDC dc(this); // 用于绘制的设备上下文if (IsIconic()){SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);// 使图标在工作区矩形中居中int cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// 绘制图标dc.DrawIcon(x, y, m_hIcon);}else{CDialog::OnPaint();}//---------------------------------------------------------if(m_pImg){if(m_Display == 0){// 复制图像imageClone(m_pImg, &saveImg);m_dibFlag = imageClone(saveImg, &workImg);// 判断图像类型m_ImageType = imageType(workImg);m_SaveFlag = m_ImageType;m_Display = 1;}}if (m_dibFlag) {                            //  DIB 结构改变,创建位图信息头if (m_lpBmi)free(m_lpBmi);m_lpBmi = CtreateMapInfo(workImg,m_dibFlag);m_dibFlag = 0;}// 图像数据char* pBits;if(workImg)pBits = workImg->imageData;// 显示位图if(workImg){StretchDIBits(dc.m_hDC,0, 0, workImg->width, workImg->height,0, 0, workImg->width, workImg->height,pBits, m_lpBmi, DIB_RGB_COLORS, SRCCOPY);}}//当用户拖动最小化窗口时系统调用此函数取得光标//显示。HCURSOR CCVDlgReadDlg::OnQueryDragIcon(){return static_cast<HCURSOR>(m_hIcon);}/************************************************************************函数:OnBnClickedOpenImage功能:加载图像************************************************************************/void CCVDlgReadDlg::OnBnClickedOpenImage(){CString csBMP = "BMP Files(*.BMP)|*.BMP|";CString csJPG = "JPEG Files(*.JPG)|*.JPG|";CString csTIF = "TIF Files(*.TIF)|*.TIF|";CString csPNG = "PNG Files(*.PNG)|*.PNG|";CString csDIB = "DIB Files(*.DIB)|*.DIB|";CString csPBM = "PBM Files(*.PBM)|*.PBM|";CString csPGM = "PGM Files(*.PGM)|*.PGM|";CString csPPM = "PPM Files(*.PPM)|*.PPM|";CString csSR  = "SR  Files(*.SR) |*.SR|";CString csRAS = "RAS Files(*.RAS)|*.RAS||";CString csFilter = csJPG + csBMP + csTIF + csPNG + csDIB+ csPBM + csPGM + csPPM + csSR + csRAS;CString name[]={"", "bmp" ,"jpg", "tif", "png", "dib","pbm", "pgm", "ppm", "sr", "ras", ""};CString strFileName;CString strExtension;// 文件存盘对话框CFileDialog FileDlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, csFilter);if (FileDlg.DoModal() == IDOK )                          {            // 载入图像m_csFileName = FileDlg.GetPathName();const char *lpctStr = (LPCTSTR)m_csFileName;Load(m_pImg,  lpctStr);} Invalidate(TRUE);}/************************************************************************函数:CStringTostring功能:将CString转换为string************************************************************************/string CCVDlgReadDlg::CStringTostring(CString str){string s;s.append(str.GetBuffer(str.GetLength()));str.ReleaseBuffer();return s;}/************************************************************************//*    函数名:Load   参  数:IplImage** pp           LPCTSTR csFileName   返回值:BOOL   功  能:载入图像*//************************************************************************/BOOL CCVDlgReadDlg::Load(IplImage* srcImg, LPCTSTR csFileName){srcImg = cvLoadImage(csFileName, -1);      // 读图像文件(DSCV)if (!srcImg) return(false);// 载入的图像未调整大小,用于保存m_pImgSrcToSave = srcImg;// 调整图像大小,以方便显示IplImage * imageresize = cvCreateImage(cvSize(400, 400),IPL_DEPTH_8U, 3);  cvResize(srcImg, imageresize,CV_INTER_LINEAR);cvFlip(imageresize);                       // 与 DIB 像素结构一致m_pImg = imageresize;Mat I(m_pImg);                           // 将IplImage转为MatI.copyTo(m_srcImg);m_Display = 0;return(true); }/************************************************************************//*    函数名:imageClone   参  数:IplImage* pi   IplImage** ppo   返回值:int   功  能:复制 IplImage 位图*//************************************************************************/int  CCVDlgReadDlg::imageClone(IplImage* pi, IplImage** ppo) {if (*ppo) {cvReleaseImage(ppo);                //  释放原来位图}(*ppo) = cvCloneImage(pi);              //  复制新位图return(1);}/************************************************************************//*    函数名:imageType   参  数:IplImage* p   返回值:int   功  能:检查图像类型*//************************************************************************/int  CCVDlgReadDlg::imageType(IplImage* p) {int i, j, k, bpl, n, pg[256];BYTE *buf;k = p->nChannels;//  检查二值图像if (k == 1) {                             for (i = 0; i < 256; i++) pg[i] = 0;buf = (BYTE*)p->imageData;bpl = p->widthStep;for (i = 0; i < p->height; i++){for (j = 0; j < p->width; j++) pg[buf[j]]++;buf+=bpl;}for (i = 0, n = 0; i < 256; i++){if (pg[i]) n++;}if (n==2) k=-1;                     //  二值图像}return(k);}/************************************************************************//*    函数名:CtreateMapInfo   参  数:IplImage* workImg           int flag   返回值:LPBITMAPINFO   功  能:创建位图信息头*//************************************************************************/LPBITMAPINFO CCVDlgReadDlg::CtreateMapInfo(IplImage* workImg,int flag){                                          BITMAPINFOHEADER BIH = {40, 1, 1, 1, 8, 0, 0, 0, 0, 0, 0};LPBITMAPINFO lpBmi;int wid,hei,bits,colors,i;wid =workImg->width;hei =workImg->height;bits=workImg->depth*workImg->nChannels;if (bits > 8) colors=0;else colors = 1 << bits;lpBmi = (LPBITMAPINFO) malloc(40 + 4 * colors);BIH.biWidth   = wid;BIH.biHeight  = hei;BIH.biBitCount= (BYTE) bits;memcpy(lpBmi, &BIH, 40);                  //  复制位图信息头if (bits == 8)                            //  256 色位图{                          if (flag == 1)                        //  设置灰阶调色板{                      for (i = 0; i < 256; i++) {VgaColorTab[i].rgbRed   = (BYTE) i;VgaColorTab[i].rgbGreen = (BYTE) i;VgaColorTab[i].rgbBlue  = (BYTE) i;}memcpy(lpBmi->bmiColors, VgaColorTab, 1024);}else if (flag == 2)                  //  设置默认调色板{                memcpy(lpBmi->bmiColors, VgaDefPal, 1024);}else if (flag == 3)                  //  设置自定义调色板{                memcpy(lpBmi->bmiColors, VgaColorTab, 1024);}}return(lpBmi);}/************************************************************************//*    函数名:Save   参  数:LPCTSTR csFileName           IplImage* m_pImg   返回值:BOOL   功  能:保存图像*//************************************************************************/BOOL CCVDlgReadDlg::Save(LPCTSTR csFileName, IplImage* m_pImg){//cvFlip(m_pImg);                             //  恢复原 OpenCV 位图结构    int bl = cvSaveImage(csFileName, m_pImg);   //  图像存盘return(bl);}void CCVDlgReadDlg::OnBnClickedSave(){CString csBMP = "BMP Files(*.BMP)|*.BMP|";CString csJPG = "JPEG Files(*.JPG)|*.JPG|";CString csTIF = "TIF Files(*.TIF)|*.TIF|";CString csPNG = "PNG Files(*.PNG)|*.PNG|";CString csDIB = "DIB Files(*.DIB)|*.DIB|";CString csPBM = "PBM Files(*.PBM)|*.PBM|";CString csPGM = "PGM Files(*.PGM)|*.PGM|";CString csPPM = "PPM Files(*.PPM)|*.PPM|";CString csSR  = "SR  Files(*.SR) |*.SR|";CString csRAS = "RAS Files(*.RAS)|*.RAS||";CString csFilter = csBMP + csJPG + csTIF + csPNG + csDIB+ csPBM + csPGM + csPPM + csSR + csRAS;CString name[]={"", "bmp" ,"jpg", "tif", "png", "dib","pbm", "pgm", "ppm", "sr", "ras", ""};CString strFileName;CString strExtension;CFileDialog FileDlg(false, NULL, NULL, OFN_HIDEREADONLY, csFilter);//  文件存盘对话框if (FileDlg.DoModal() == IDOK )                           //  选择了文件名{        strFileName = FileDlg.m_ofn.lpstrFile;if (FileDlg.m_ofn.nFileExtension == 0)                //  无文件后缀{  strExtension = name[FileDlg.m_ofn.nFilterIndex];strFileName  = strFileName + '.' + strExtension;  //  加文件后缀}Save(strFileName, m_pImgSrcToSave);                   //  当前画面存盘} }


原创粉丝点击