我是靠谱客的博主 忧伤老鼠,最近开发中收集的这篇文章主要介绍图片读取显示,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

数字图像处理 VC++实现图片的读取、显示

数字图像处理(Digital Image Processing)
又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程.

分类

1. 按图像灰度
灰度图像:一般为256灰度级(8位图)、二值图像
2. 按图像格式

光栅图像:bmp、jpg、png、gif
矢量图像:wmf、svg

1. 按图像维度
全景照片

图像变换

1. 不考虑插值

平移
翻转/镜像

2. 考虑插值

旋转
缩放(放大:过采样,缩小:欠采样)
错切

3. 傅里叶变换

图片的读取
1.在Microsoft Visual Studio 2010中创建MFC基于对话框的应用程序
创建项目在这里插入图片描述点击确定,然后点击下一步
在这里插入图片描述在这里插入图片描述在这里插入图片描述这样就创建完成了

2.在资源视图的Dialog界面创建图片显示窗口和控制按钮,先把Dialog界面中原有的控件删除掉,然后在对话框中添加picture control和Button 等控件。分别修改各个控件的ID和Caption。
在这里插入图片描述在这里插入图片描述3.双击打开按钮,MFC自动添加消息响应函数void CMFCDlg::OnBnClickedButton1(),并在消息响应函数中添加如下代码:

	CString m_strSrcBmpPath;
    BITMAPFILEHEADER *m_pBmpFileHeader;


CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("bmp(*.bmp)|*.bmp||"),this);
	if (dlg.DoModal()!=IDOK)
	{
		MessageBox(_T("图片打开失败"));
		return;
	}
	m_strSrcBmpPath = dlg.GetPathName();

	CFile file;
	file.Open(m_strSrcBmpPath,CFile::modeRead);
	m_pBmpFileHeader = new BITMAPFILEHEADER[14];
	file.Read(m_pBmpFileHeader,14);
	
	file.Seek(14,CFile::begin);
	m_pBmpInfo = new BITMAPINFO[40+256*4];
	file.Read(m_pBmpInfo, 40+256*4);
	if (m_pBmpInfo->bmiHeader.biBitCount==8)//灰度图像,有调色板
	{
		file.Seek(14+40+256*4,CFile::begin);
	}
	else if (m_pBmpInfo->bmiHeader.biBitCount==24)//彩色图像,无调色板
	{
		file.Seek(14+40,CFile::begin);
	}

	int iWidth = m_pBmpInfo->bmiHeader.biWidth;
	int iHeight = m_pBmpInfo->bmiHeader.biHeight;
	int iImgSize = m_pBmpInfo->bmiHeader.biSizeImage;
	int iXPels = m_pBmpInfo->bmiHeader.biXPelsPerMeter;
	int iYPels = m_pBmpInfo->bmiHeader.biYPelsPerMeter;
	int biClrUsed = m_pBmpInfo->bmiHeader.biClrUsed;
	int biClrImportant = m_pBmpInfo->bmiHeader.biClrImportant;
	m_pSrcBuf = new char[file.GetLength()];
	file.Read(m_pSrcBuf, m_pBmpInfo->bmiHeader.biSizeImage);
	file.Close();

	Invalidate();

4.要想将读取的图像显示出来,需要在上面函数后面插入代码如下:

MessageBox(_T("图片打开成功"));
		CDC *m_pDC = GetDC();
		CRect m_rc;
	    GetDlgItem(IDC_SRCImage)->GetWindowRect(&m_rc);
	    ScreenToClient(&m_rc);
	    ::SetStretchBltMode(m_pDC->GetSafeHdc(),COLORONCOLOR);
	   ::StretchDIBits(m_pDC->GetSafeHdc(),
		   m_rc.left,m_rc.top,m_rc.Width(),m_rc.Height(),
		   0,0,m_pBmpInfo->bmiHeader.biWidth,m_pBmpInfo->bmiHeader.biHeight,
		   m_pSrcBuf,m_pBmpInfo,
		   DIB_RGB_COLORS,SRCCOPY);

5.要注意参数的定义

BITMAPINFO *m_pBmpInfo;
char *m_pSrcBuf;
CString m_strSrcBmpPath;
BITMAPFILEHEADER *m_pBmpFileHeader;

6.运行程序,成功运行会如下显示图片:
在这里插入图片描述注意:这里只能选择图片格式为:.bmp

有的小伙伴可能在学校机房学习,有时候会出现自己做好了,拷入U盘拿到机房电脑上运行不了,这时候需要自己去C盘删除东西,就可以运行了。操作步骤如下:
C盘——Program Files (x86)——Microsoft Visual Studio 2010——VC——bin——cvtres.exe(删除掉)
这时候程序就可以正常运行了。

最后

以上就是忧伤老鼠为你收集整理的图片读取显示的全部内容,希望文章能够帮你解决图片读取显示所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部