MFC界面上显示BMP图片

2024-06-14 23:32
文章标签 显示 界面 图片 mfc bmp

本文主要是介绍MFC界面上显示BMP图片,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、通过点击界面浏览按钮选择BMP图像文件。

点击浏览按钮打开文件对话框选择BMP图像文件,得到文件所在的路径目录。关键代码如下:

 
  1. void ShowBMPDlg::OnButtonSelectiamge()  
  2.     char  szFilter[] = "BMP Files (*.bmp)|*.bmp|All Files(*.*)|*.*||"
  3.     CFileDialog dlg( TRUE,"BMP",NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter ); 
  4.     if(dlg.DoModal() == IDOK) 
  5.     { 
  6.         strPathName = dlg.GetPathName();         
  7.         LoadShowBMPFile(strPathName);     
  8.         m_hBitmap = BufferToHBITMAP();     
  9.         Invalidate(); 
  10.     } 

2、加载BMP文件到内存
通过得到的BMP图像文件路径目录,加载BMP图像文件到内存中。关键代码如下:

 
  1. BOOL ShowBMPDlg::LoadShowBMPFile(const char *pPathname) 
  2.     CFile file; 
  3.     if( !file.Open( pPathname, CFile::modeRead) ) 
  4.         return FALSE; 
  5.     DWORD  m_nFileLen; 
  6.     m_nFileLen = file.GetLength(); 
  7.     m_pBMPBuffer = new char[m_nFileLen + 1]; 
  8.     if(!m_pBMPBuffer) 
  9.         return FALSE; 
  10.     if(file.Read(m_pBMPBuffer,m_nFileLen) != m_nFileLen) 
  11.         return FALSE; 
  12.     return TRUE; 

3、将内存中的BMP文件内容转换到HBITMAP
将内存中的BMP文件内容转换成位图句柄。关键代码如下:

 
  1. HBITMAP ShowBMPDlg::BufferToHBITMAP() 
  2.     HBITMAP                hShowBMP; 
  3.     LPSTR                hDIB,lpBuffer = m_pBMPBuffer; 
  4.     LPVOID                lpDIBBits; 
  5.     BITMAPFILEHEADER    bmfHeader; 
  6.     DWORD                bmfHeaderLen; 
  7.      
  8.     bmfHeaderLen = sizeof(bmfHeader); 
  9.     strncpy((LPSTR)&bmfHeader,(LPSTR)lpBuffer,bmfHeaderLen); 
  10.     if (bmfHeader.bfType != (*(WORD*)"BM")) return NULL; 
  11.     hDIB = lpBuffer + bmfHeaderLen; 
  12.     BITMAPINFOHEADER &bmiHeader = *(LPBITMAPINFOHEADER)hDIB ; 
  13.     BITMAPINFO &bmInfo = *(LPBITMAPINFO)hDIB ; 
  14.     m_bmW = bmiHeader.biWidth; 
  15.     m_bmH = bmiHeader.biHeight; 
  16.     lpDIBBits=(lpBuffer)+((BITMAPFILEHEADER *)lpBuffer)->bfOffBits; 
  17.     CClientDC dc(this); 
  18.     hShowBMP = CreateDIBitmap(dc.m_hDC,&bmiHeader,CBM_INIT,lpDIBBits,
  19. &bmInfo,DIB_RGB_COLORS); 
  20.     return hShowBMP; 

4、在屏幕上显示BMP图像
双缓冲实现BMP位图显示在屏幕上。关键代码如下:

 
  1. void ShowBMPDlg::DrawImage(int x, int y, CDC *pDC) 
  2.     HBITMAP OldBitmap; 
  3.     CDC MemDC; 
  4.     MemDC.CreateCompatibleDC(pDC); 
  5.     OldBitmap=(HBITMAP)MemDC.SelectObject(m_hBitmap); 
  6.     CBitmap* pBitmap = CBitmap::FromHandle(m_hBitmap); 
  7.     if(m_bmW == 0 || m_bmH == 0) 
  8.         return ; 
  9.     CRect rect; 
  10.     GetClientRect(&rect);     
  11.     pDC->BitBlt(x,y,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY); 
  12.     MemDC.SelectObject(OldBitmap); 

 

这个方法是我们经常用的用来在界面上画图的一种方法。

这篇关于MFC界面上显示BMP图片的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1061810

相关文章

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

c/c++的opencv实现图片膨胀

《c/c++的opencv实现图片膨胀》图像膨胀是形态学操作,通过结构元素扩张亮区填充孔洞、连接断开部分、加粗物体,OpenCV的cv::dilate函数实现该操作,本文就来介绍一下opencv图片... 目录什么是图像膨胀?结构元素 (KerChina编程nel)OpenCV 中的 cv::dilate() 函

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

idea中project的显示问题及解决

《idea中project的显示问题及解决》:本文主要介绍idea中project的显示问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录idea中project的显示问题清除配置重China编程新生成配置总结idea中project的显示问题新建空的pr

Java实现图片淡入淡出效果

《Java实现图片淡入淡出效果》在现代图形用户界面和游戏开发中,**图片淡入淡出(FadeIn/Out)**是一种常见且实用的视觉过渡效果,它可以用于启动画面、场景切换、轮播图、提示框弹出等场景,通过... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细