陆宗骐-Visual C++.NET图像处理编程(笔记1)-图片的创建和显示
2010-10-07 18:51
183 查看
文档类代码:(在文档中操作数据)
void CCImageDoc::OnOpenImage()
{
CString strFilter;
CSimpleArray<GUID> aguidFileTypes;
HRESULT hResult;
hResult = pImg[0]->GetExporterFilterString(strFilter,aguidFileTypes);
if (FAILED(hResult))
return;
CFileDialog dlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST, strFilter);
dlg.m_ofn.nFilterIndex = m_nFilterLoad;
hResult = (int)dlg.DoModal();
if(hResult != IDOK)
return;
m_nFilterLoad = dlg.m_ofn.nFilterIndex;
m_FileName = dlg.GetFileName();
if (!SaveCanvas.IsNull())
SaveCanvas.Destroy();
hResult = SaveCanvas.Load(m_FileName);
if (FAILED(hResult))
return;
if (ImageType(pImg[0])<2)
LowTypeToIndex(pImg[1],pImg[0]);
else
ImageCopy(pImg[1],pImg[0]);
SetPathName(m_FileName,1);
UpdateAllViews(NULL);
m_nFArea=0;
}
void CCImageDoc::OnSaveImage()
{
CString strFilter;
CSimpleArray<GUID> aguidFileTypes;
CString strFileName;
CString strExtension;
HRESULT hResult;
hResult=SaveCanvas.GetExporterFilterString(strFilter,aguidFileTypes);
if(FAILED(hResult)) return;
CFileDialog dlg(FALSE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_EXPLORER,strFilter);
dlg.m_ofn.nFilterIndex=m_nFilterLoad;
hResult=(int)dlg.DoModal();
if(hResult!=IDOK)
return;
strFileName=dlg.m_ofn.lpstrFile;//取对话框中输入的文件名
if(dlg.m_ofn.nFileExtension==0)
{
switch(dlg.m_ofn.nFilterIndex)
{ case 1:
strExtension="bmp";
break;
case 2:
strExtension="jpg";
break;
case 3:
strExtension="gif";
break;
case 4:
strExtension="tif";
break;
case 5:
strExtension="png";
break;
default:
break;
}
strFileName=strFileName+'.'+strExtension;//文件名补上后缀
}
hResult=WorkCanvas.Save(strFileName);//图像存盘
if(FAILED(hResult)) return;
SetPathName(strFileName,1);
}
在视图中显示图片的代码:
定义一个函数(把内存图片显示到窗口)
void CCImageView::WorkCanvusToWindow() //将内存画布送入窗口
{
CClientDC dc(this);
struct IMAGEPARAMENT p;
if (SaveCanvas.IsNull()) return;
GetImageParament(&WorkCanvas,&p);//读取位图的参数
WorkCanvas.BitBlt(dc,0,0,p.nWidth,p.nHeight,0,0,SRCCOPY);//位块传输实现显示
}
函数分析:
用到了结构
struct IMAGEPARAMENT {
int nWidth;
int nHeight;
int nBitCount;
int nBytesPerLine;
int nBytesPerPixel;
int nNumColors;
int nSize;
};
void GetImageParament(CImage *pImg,struct IMAGEPARAMENT *ppImgParam);
//读取位图参数
void GetImageParament(CImage *pImg,struct IMAGEPARAMENT *ppImgParam)
{
if (pImg->IsNull()) return;
ppImgParam->nWidth = pImg->GetWidth();
ppImgParam->nHeight = pImg->GetHeight();
ppImgParam->nBitCount = pImg->GetBPP();
ppImgParam->nBytesPerLine = (pImg->GetWidth()*pImg->GetBPP()+31)/32*4;
ppImgParam->nBytesPerPixel = pImg->GetBPP()/8;
if (pImg->GetBPP()<=8)
ppImgParam->nNumColors= 1 << pImg->GetBPP();
else
ppImgParam->nNumColors= 0;
ppImgParam->nSize = ppImgParam->nBytesPerLine*ppImgParam->nHeight;
}
详细代码请参考-陆宗骐-Visual C++.NET图像处理编程(笔记1)-图片的创建和显示(Demo1)
void CCImageDoc::OnOpenImage()
{
CString strFilter;
CSimpleArray<GUID> aguidFileTypes;
HRESULT hResult;
hResult = pImg[0]->GetExporterFilterString(strFilter,aguidFileTypes);
if (FAILED(hResult))
return;
CFileDialog dlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST, strFilter);
dlg.m_ofn.nFilterIndex = m_nFilterLoad;
hResult = (int)dlg.DoModal();
if(hResult != IDOK)
return;
m_nFilterLoad = dlg.m_ofn.nFilterIndex;
m_FileName = dlg.GetFileName();
if (!SaveCanvas.IsNull())
SaveCanvas.Destroy();
hResult = SaveCanvas.Load(m_FileName);
if (FAILED(hResult))
return;
if (ImageType(pImg[0])<2)
LowTypeToIndex(pImg[1],pImg[0]);
else
ImageCopy(pImg[1],pImg[0]);
SetPathName(m_FileName,1);
UpdateAllViews(NULL);
m_nFArea=0;
}
void CCImageDoc::OnSaveImage()
{
CString strFilter;
CSimpleArray<GUID> aguidFileTypes;
CString strFileName;
CString strExtension;
HRESULT hResult;
hResult=SaveCanvas.GetExporterFilterString(strFilter,aguidFileTypes);
if(FAILED(hResult)) return;
CFileDialog dlg(FALSE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_EXPLORER,strFilter);
dlg.m_ofn.nFilterIndex=m_nFilterLoad;
hResult=(int)dlg.DoModal();
if(hResult!=IDOK)
return;
strFileName=dlg.m_ofn.lpstrFile;//取对话框中输入的文件名
if(dlg.m_ofn.nFileExtension==0)
{
switch(dlg.m_ofn.nFilterIndex)
{ case 1:
strExtension="bmp";
break;
case 2:
strExtension="jpg";
break;
case 3:
strExtension="gif";
break;
case 4:
strExtension="tif";
break;
case 5:
strExtension="png";
break;
default:
break;
}
strFileName=strFileName+'.'+strExtension;//文件名补上后缀
}
hResult=WorkCanvas.Save(strFileName);//图像存盘
if(FAILED(hResult)) return;
SetPathName(strFileName,1);
}
在视图中显示图片的代码:
定义一个函数(把内存图片显示到窗口)
void CCImageView::WorkCanvusToWindow() //将内存画布送入窗口
{
CClientDC dc(this);
struct IMAGEPARAMENT p;
if (SaveCanvas.IsNull()) return;
GetImageParament(&WorkCanvas,&p);//读取位图的参数
WorkCanvas.BitBlt(dc,0,0,p.nWidth,p.nHeight,0,0,SRCCOPY);//位块传输实现显示
}
函数分析:
用到了结构
struct IMAGEPARAMENT {
int nWidth;
int nHeight;
int nBitCount;
int nBytesPerLine;
int nBytesPerPixel;
int nNumColors;
int nSize;
};
void GetImageParament(CImage *pImg,struct IMAGEPARAMENT *ppImgParam);
//读取位图参数
void GetImageParament(CImage *pImg,struct IMAGEPARAMENT *ppImgParam)
{
if (pImg->IsNull()) return;
ppImgParam->nWidth = pImg->GetWidth();
ppImgParam->nHeight = pImg->GetHeight();
ppImgParam->nBitCount = pImg->GetBPP();
ppImgParam->nBytesPerLine = (pImg->GetWidth()*pImg->GetBPP()+31)/32*4;
ppImgParam->nBytesPerPixel = pImg->GetBPP()/8;
if (pImg->GetBPP()<=8)
ppImgParam->nNumColors= 1 << pImg->GetBPP();
else
ppImgParam->nNumColors= 0;
ppImgParam->nSize = ppImgParam->nBytesPerLine*ppImgParam->nHeight;
}
详细代码请参考-陆宗骐-Visual C++.NET图像处理编程(笔记1)-图片的创建和显示(Demo1)
相关文章推荐
- SDL库的学习笔记之三—创建窗口与显示图片
- 【Python_OpenCv】笔记1:基于Python和OpenCv的图片的加载,显示和图片的保存
- nodejs基础(一)创建服务器,分发路由,读文件,写文件,读取图片,图文一起显示
- Android图片缓存和显示能力(笔记)
- OpenCV学习笔记(五十六)——InputArray和OutputArray的那些事core OpenCV学习笔记(五十七)——在同一窗口显示多幅图片 OpenCV学习笔记(五十八)——读《Mast
- 创建一个基于ViSP的图片显示程序
- OpenCV学习笔记之一:OpenCV中显示图片(VS2010+OpenCV3.0版本)
- python opencv 创建窗口,加载图片,显示图片,灰度转换,保存图片
- Qt学习笔记之图片显示(自动调整大小适应设计的范围)
- OpenCV学习笔记(1)——显示一个图片
- 利用Qt的标准文件对话框及OpenCV创建窗口并显示图片
- openCV学习笔记(5):使用sprintf函数实现在窗口连续显示同一文件夹下的图片
- iOS 开发笔记---在Label中显示图片
- 【VC编程】笔记1--创建一个Win32的应用程序,并显示创建的窗口和菜单
- NSIS 学习(1)——安装包打开后主界面显示背景图片(使用向导创建)
- 图片都没有显示出来的更多资料在我的印象笔记中
- zynq-7000学习笔记(十五)——在QT上调用opencv加载图片并显示
- GIMP 创建arm LCD上显示的图片
- 代码创建button图片 文字等不显示或显示不正确原因及cell点击事件和btn的点击事件优先级
- Ubuntu创建opencv工程并显示一张图片