• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++针对bmp格式解析实例

C++针对bmp格式解析实例

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++读取bmp图像,c++实例开发,linux c++项目实例,c++游戏开发实例,c++程序实例等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例讲述了C++针对bmp格式解析的方法,分享给大家供大家参考。具体方法如下:

写这代码时,容易出现如下错误:
1. 忘了on_wm_paint()  一直在界面上画不出来
2. 正确写法

写成了 

这里主要是用了前面一篇中的CWnd框架。

.cpp源文件如下:

#include "resource.h" 
#include <afxdlgs.h > 
 
CMyApp theApp; 
BOOL CMyApp::InitInstance() 
{ 
    m_pMainWnd = new CMainWindow; 
    m_pMainWnd->ShowWindow(m_nCmdShow); 
    return TRUE; //必须返回TRUE,否则不会进入消息循环,界面会直接退出 
} 
 
//CMainWindow 
BEGIN_MESSAGE_MAP(CMainWindow, CWnd) 
ON_WM_CREATE() 
ON_WM_PAINT() 
ON_COMMAND(IDC_OPEN, OnOpen) 
END_MESSAGE_MAP() 
//构造函数 
CMainWindow::CMainWindow() 
{ 
    LPCTSTR lpszClassName = ::AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW, ::LoadCursorA(NULL, IDC_ARROW), (HBRUSH)(COLOR_3DFACE+1), theApp.LoadIcon(IDI_MAIN)); 
    CreateEx(WS_EX_CLIENTEDGE, lpszClassName, "xxx", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL); 
} 
//析构函数 
CMainWindow::~CMainWindow() 
{ 
 
} 
//消息映射函数 
int CMainWindow::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{ 
    //OutputDebugString("oncreate"); 
    CClientDC dc(this); 
    m_hMemDC = ::CreateCompatibleDC(dc); 
    m_nWidth = 0; 
    m_nHeight = 0; 
    //设置菜单 
    HMENU hMenu = ::LoadMenuA(theApp.m_hInstance, (LPCSTR)IDR_MENU); 
    ::SetMenu(m_hWnd, hMenu); 
    return 0; 
} 
 
void CMainWindow::OnNcDestroy( ) 
{ 
    delete this; 
} 
void CMainWindow::OnDestroy() 
{ 
     
} 
void CMainWindow::OnPaint() 
{ 
    CPaintDC dc(this); 
    ::BitBlt(dc, 0, 0, m_nWidth, m_nHeight, m_hMemDC, 0, 0, SRCCOPY); 
} 
void CMainWindow::OnOpen() 
{ 
    CFileDialog dlg(TRUE); 
    if (IDOK != dlg.DoModal()) 
    { 
        return; 
    } 
    HANDLE  hFile = ::CreateFile(dlg.GetPathName(), GENERIC_READ , FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 
    if (INVALID_HANDLE_VALUE == hFile) 
    { 
        return; 
    } 
    HANDLE  hFileMap = ::CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL); 
    if (NULL == hFileMap) 
    { 
        return; 
    } 
    LPVOID lpBase = ::MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, 0); 
    if (NULL == lpBase) 
    { 
        return; 
    } 
    //从头结构中取三个信息:1.bfOffBits位图数据在文件中的起始位置,2.m_nWidth图像的宽,3.m_nHeight图像的高 
    BITMAPFILEHEADER* pbitmapFileHeader; 
    BITMAPINFO* pbitmapInfo; 
    pbitmapFileHeader = (BITMAPFILEHEADER*)lpBase; 
    if (pbitmapFileHeader->bfType != MAKEWORD('B','M')) 
    { 
        MessageBox("not bmp"); 
        ::UnmapViewOfFile(lpBase); 
        ::CloseHandle(hFileMap); 
        ::CloseHandle(hFile); 
    } 
    //DWORD bfOffBits = pbitmapFileHeader->bfOffBits; 
    BYTE* pBits = (BYTE*)lpBase + pbitmapFileHeader->bfOffBits; 
    pbitmapInfo = (BITMAPINFO*)((BYTE*)lpBase + sizeof(BITMAPFILEHEADER)); 
    m_nWidth = pbitmapInfo->bmiHeader.biWidth; 
    m_nHeight = pbitmapInfo->bmiHeader.biHeight; 
    //显示BMP文件到内存设备 
    //得客户区DC 
    CClientDC dc(this); 
    //创建与客户区DC兼容的位图 
    HBITMAP hBitmap = ::CreateCompatibleBitmap(dc, m_nWidth, m_nHeight); 
    if (hBitmap == 0) 
    { 
        return; 
    } 
    //位图选入内存DC 
    ::SelectObject(m_hMemDC, hBitmap); 
 
    //图像数据放到建立的DC中 
    ::SetDIBitsToDevice(m_hMemDC, 0, 0, m_nWidth, m_nHeight, 0, 0, 0, m_nHeight, pBits, pbitmapInfo, DIB_RGB_COLORS); 
 
    ::InvalidateRect(m_hWnd, NULL, TRUE); 
    ::DeleteObject(hBitmap); 
 
    ::UnmapViewOfFile(lpBase); 
    ::CloseHandle(hFileMap); 
    ::CloseHandle(hFile); 
 
}</div>

.h头文件如下:

 
class CMyApp:public CWinApp 
{ 
public: 
    virtual BOOL InitInstance(); 
}; 
 
//CMainWindow 
class CMainWindow:public CWnd 
{ 
public: 
    CMainWindow(); 
    ~CMainWindow

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++针对bmp格式解析实例

相关文章

  • 2017-05-28c/c++语言位域注意事项分析
  • 2017-05-28C++归并排序算法实例
  • 2017-05-28讲解C++编程中Address-of运算符&的作用及用法
  • 2017-05-28C语言实现对bmp格式图片打码
  • 2017-05-28方阵顺时针旋转的实现代码
  • 2017-05-28c++ 构造函数中调用虚函数的实现方法
  • 2017-05-28MFC程序执行过程深入剖析
  • 2017-05-28c++线程池实现方法
  • 2017-05-28C++中char*转换为LPCWSTR的解决方案
  • 2017-08-27c语言实现bfs状态搜索

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • c++ 构造函数中调用虚函数的实现方法
    • C/C++中指针和引用之相关问题深入研究
    • C++内存查找实例
    • 安装OpenMPI来配合C语言程序进行并行计算
    • C语言中的强符号和弱符号介绍
    • 生成随机数rand函数的用法详解
    • 解析wprintf 中使用%I64d格式化输出LONGLONG的详细介绍
    • C++编程中的命名空间基本知识讲解
    • C++基础入门教程(六):为什么创建类的时候要用new?
    • 深入解析C++中的指针数组与指向指针的指针

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有