VC++60 第十一章 显示位图

VC++结合Picolo图像采集卡实现视频捕获与位图输出实战 IOCTL码是一个32位整数,按位域划分包含设备类型、访问权限、函数编号和数据传输方式。Picolo驱动应在其头文件中预定义一系列宏,供应用程序引用。典型的IOCTL码构造方式为:其中CTL_CODE宏展开为:位段描述31–16设备类型15–14访问模式(读/写/两者)13–2功能代码1–0方法(METHOD_BUFFERED/METHOD_DIRECT等)不同传输方法影响内存映射行为::系统复制输入输出缓冲区。 阅读详情

第十一章 显示位图

 

在窗口中显示位图(*.bmp文件)的需要是经常会发生的。本章介绍如何把位图文件加入到工程的资源中,如何在对话框中显示出来。因为图片是在设计阶段加入的,成为静态加入图片。VC的资源管理只能够加入BMP格式的图片,因此要使用GIF和JPG格式等其他的图片和想动态地加入图片,还需要使用别的控件,这在以后专门介绍。

 

本章要点

1 在工程中添加位图资源
2 把图片读入内存和屏幕显示

 

11.1 MyBmp.exe程序的界面和功能

 

本程序打开后在窗口显示一幅图——小猫,上面有一个简单的菜单,没有其他控件。File菜单中有Open, Save和Exit三项。Open菜单项没有加入代码,点击后没有反应;Save菜单项连消息映射都没有加入;点击[Exit]则可以退出程序。[Help]菜单项会打开About消息框。但是,窗口是可以改变大小的,当鼠标拖动右下角时,图片总是充满整个用户区域。

VC++60 <wbr>第十一章 <wbr>显示位图
chap11-01

 

11.2 添加资源和设计界面

 

1 加入位图资源
事先找好小猫的图片文件cat.bmp,我这是在WINDOWS目录中的,也可以用其它的BMP格式的图片,别的格式不行。右击工作区资源页的Bitmap分支,选“导入或Import”;在打开的文件对话框中位图的文件名;这就在Bitmap分支上增加了一个位图,你还需要用右键菜单设置属性,把ID改为IDB_MYBMP。双击它还可以对它进行图片加工。

2 添加菜单
参考第四章叙述的方法添加菜单IDR_MENU1,它包含FIEL和HELP两个菜单。FIEL菜单包括三个菜单项,HELP菜单就只有Help菜单项。打开类向导,将菜单IDR_MENU1与类CMyBmpDlg项关联。

3 设置主窗口
打开主对话框的属性页,设置ID = IDD_MYBMP_DIALOG,标题 = MyBmp-显示位图,并把MENU1加入进去。在Styles页设置窗口是可以改变大小的,加上系统菜单。

11.3 编写代码

为了在屏幕上显示图片,需要给出区域的左上角坐标和区域的宽度和长度。因为要使显示区域是可变的,所以引进两个全局变量
    int m_Width, m_Height ;
定义在构造函数中。

显示图片就是先创建一个内存对象(HDC),把图片读入到这个内存对象这个内存,再用函数StretchBlt()把它映射到指定的屏幕区域。我们在OnPaint()函数中加入如下代码:
    else
    {
        //My code startup here
        //Create 环境设备
        CPaintDC dc(this);
        //创建一个位图对象
        HBITMAP hbitmap = ::LoadBitmap(
            ::AfxGetInstanceHandle(),
            MAKEINTRESOURCE(IDB_MYBMP));

        //Create a memory dc
        HDC hMemDC = ::CreateCompatibleDC(NULL);
        //put the bitmap into memory dv
        SelectObject(hMemDC,hbitmap);

        //Copy the memory dc into the screen
        ::StretchBlt(dc.m_hDC,         //Draw on screen field

            0,0, m_Width, m_Height,   
 //Place of the screen
            hMemDC,                   
 //Memory DC map into screen
            0,0,113,133,             
 //Size of this pictrue
            SRCCOPY);                
 //Copy Mode
        //My code END
......

当对话框的窗口大小被改变时系统会发送消息,因此我们需要添加消息映射WM_SIZE,并且在响应函数OnSize中把窗口的大小值传递给m_Width和m_Height,并让窗口重画。这函数为:
void CMyBmpDlg::OnSize(UINT nType, int cx, int cy)
{
    CDialog::OnSize(nType, cx, cy);
    // TODO: Add your message handler code here
    m_Width = cx;
    m_Height= cy;
    Invalidate();
}

OnSize()中的变量cx,cy就是当前窗口(客户区)的宽度和高度。

要在HELP菜单中打开About对话框,就在OnHelpAbout()函数中加入代码:
    CAboutDlg dlg;
    dlg.DoModal();

给Open菜单项添加消息映射但不加代码,给EXIT菜单项加入退出代码OnOK()。编码结束,编译和运行。

 

11.4 代码解析

 

HBITMAP hbitmap = ::LoadBitmap(
            ::AfxGetInstanceHandle(),
            MAKEINTRESOURCE(IDB_MYBMP));

创建一个HBITMAP类的对象hbitmap,双冒号表示调用一个SDK的函数LoadBitmap(),它返回一个HBITMAP类的对象。它有两个参数。第一个由:AfxGetInstanceHandle()函数提供,它是这个对象的句柄。第二个由宏MAKEINTRESOURCE()生成,它对应位图资源。

下一行
    HDC hMemDC = ::CreateCompatibleDC(NULL);
定义了一个HDC类型的对象,它表示一块内存区域,由函数CreateCompatibleDC()创建。然后,让内存区域和位图对象hbitmap联系起来,这项任务由函数SelectObject()来实现。

现在,就可以用StretchBlt()函数来显示图形了。这项任务是由StretchBlt()函授来实现的,它有11个参数,列举如下:

        ::StretchBlt(dc.m_hDC,         //环境设备dc的可画的对象
            0,0, m_Width, m_Height,   
 //屏幕区域
            hMemDC,                   
 //内存对象源,它已经含有图片信息。
            0,0,113,133,             
 //原图片的大小
            SRCCOPY);                
 //Copy模式

dc.m_hDC是dc的一个数据成员,是“可画图”的对象。原图片的大小必须事先查好。0

 

视频帧提取与BMP位图合成AVI视频的实践指南 OpenCV成立于1999年,其主要贡献者是Intel,初始版本由C语言编写,其后发展为C++接口。在最新的版本中,OpenCV支持Python、Java、MATLAB等编程语言。它不仅能够运行在多个操作系统上,包括Linux、Windows、OS X、Android和iOS,还可以被集成到Web应用中。OpenCV库的模块化设计允许开发者根据需求选择使用特定的模块,从而减少不必要的资源消耗。在安装OpenCV之前,需要确保计算机上已经安装了CMake和一个兼容的C++编译器。 阅读详情

相关推荐

MFC在图像控件中显示位图

MFC在图像控件中显示位图,也可以修改为在用户区显示位图

vc6中如何加入BMP图片资源

vc6会把直接硬加进来的BMP图置为空,方式如下:1.在资源编辑框中改,然后需要将原来的图片重新考到相应的文件夹下,Rebuild All2.不在资源编辑器中改,而在rc中进行修改,然后Rebuil All 

3068

显示资源中的位图的资源

显示资源中的位图 显示资源中的位图 显示资源中的位图 显示资源中的位图 显示资源中的位图 显示资源中的位图

Windows程序设计:位图的显示

在WIN32中,将位图显示在窗口上的步骤有一些复杂 它不是将位图像线条一样直接画在窗口上的,而是通过内存句柄调用显示在窗口上的 如果要在窗体上显示位图,首先要把位图调入资源视图中 加载位图资源:将资源视图中的位图加载进来 static HBITMAP hBitMap; //位图句柄 static BITMAP BitMap; //位图结构体 其中位图结构体

alex1997222的博客 2773

VC MFC在窗口处显示位图代码

VC MFC在窗口处显示位图代码 VC MFC 显示位图 代码 VC MFC 显示位图 代码

VC中GDI方法在Picture控件中显示PNG、bmp、jpg图片

vc中在Picture空间中显示png图片,使用重载OnPain和对话框背景色覆盖原图的方法实现了png半透明的显示并且不会加重阴影。支持bmp、jpg等多种格式

mfc 将变量存入MySQL,MFC或VC++将位图保存到数据库并读出来

【实例简介】MFC或VC++将位图保存到数据库并读出来测试通过【实例截图】【核心代码】43a5d943-f07c-498e-b6f0-e86f699715fd└── test1├── 1.bmp├── 460.bmp├── Debug│ ├── msado15.tlh│ ├── msado15.tli│ ├── StdAfx.obj│ ├── test1Dlg.obj│ ├──...

weixin_39562089的博客 206

VC6.0显示JPG图片

使用VC++编程,显示JPG图片,还可以进行比例放大缩小的操作

VC++双缓冲技术解析与实现

双缓冲技术是计算机图形学中解决屏幕闪烁问题的经典方案,其核心原理是通过内存缓冲区的预渲染机制,将完整的图形数据一次性输出到显示设备。在Windows GDI编程中,设备上下文(DC)的直接操作会导致实时刷新问题,而双缓冲技术通过创建兼容的内存DC和位图,配合BitBlt函数实现无闪烁渲染。这项技术特别适用于数据可视化、游戏开发等需要高频刷新的场景,能显著提升用户体验。随着Direct2D等现代图形API的普及,双缓冲技术仍然是理解图形渲染管线的重要基础概念,掌握其实现原理对优化GDI+性能、处理高DPI显示

weixin_34161083的博客 440

现vc 6.0中位图对话框类

可以使用这个类实现vc 6.0中位图 异型的位图对话框

用Typora画流程图和序列图:Mermaid语法实战教程(含常见报错解决)

本文是一份详细的Typora与Mermaid语法实战教程,教你如何在Markdown文档中高效绘制流程图和序列图。文章涵盖从环境配置、核心语法到复杂图表构建的全过程,并重点解析了常见报错原因与解决方案,助你将可视化图表无缝融入文档工作流。

weixin_29279101的博客 299

C++实现BitMap位图类

bitmap意为位图,它的每一位用于存放状态,适用于大规模并且不重复的数据,判断某个数据是否存在于位图之中。 之前看过一道腾讯的面试题,有两组数据分别是40亿个QQ号码和60亿个QQ号码,需要查找它们之间重合的数据。如果使用暴力查找一一匹配的话,时间和空间是都吃不消,时间和空间的复杂度很高,很不适用;如果使用分治法分批处理的话,内存可以降低,但是时间复杂度依然很高,也不太适用。如果使用位图的话,就可以很好的解决这个问题,时间空间上都吃的消。 在C++中,整型占32位4个字...

m0_64428335的博客 3583

如何配置 OpenClaw 使用免费搜索工具:摆脱付费 API 限制

本文介绍了如何配置OpenClaw使用免费搜索工具来替代付费API。主要内容包括:1)启用内置的web_fetch工具直接获取网页内容;2)创建自定义脚本聚合免费AI资讯源;3)配置其他免费网络工具。文章详细说明了配置步骤,推荐了多个优质免费AI资讯网站,并分析了该方案的优劣势。这种配置方式完全免费且灵活,特别适合预算有限的用户,能够在不依赖付费API的情况下获取所需信息。

dongdeaiziji的专栏 9814

怎么用VC++6.0编写图片浏览器

​打开VC++6.0,新建一个MFC工程,工程取名【ShowPic】;步骤:【文件】--【工程】--【MFC Appwizard[exe]】--【工程名】--【位置】--【确定】 选择【基本对话框】,然后直接点击【完成】,这里我们全部默认MFC应用程序向导的剩余步骤 MFC向导直接给我们生成了一个对话框,这个对话框是可以编译运行的,不过没有什么功能而已

eit520的专栏 4596

一文解释电路中常用电子元器件应用和选型01

电容和二极管是电路中最常用的两个电子元器件,种类和系列众多,这里简单总结一下应用场景和选型方式 电容(Capacitor) 电容的种类(20种以上)和应用非常广泛,但是我经常遇到的无非就是下面这几种: 应用 1.隔直流。 2.旁路(去耦) 3.耦合 4.滤波 5.温度补偿 6.计时 7.调谐 8.整流 9.储能 种类 1. 陶瓷电容 2. 云母电容 3. 铝电解电容 4. 钽

weixin_43904073的博客 2237

Ollama-OCR实战:5分钟搞定PDF文档转Markdown(附qwen2.5vl模型配置)

本文详细介绍了如何利用Ollama本地部署多模态大模型qwen2.5vl,结合OCR技术,实现PDF文档到Markdown的端到端智能转换。通过解析传统OCR的局限与AI方案的优势,并提供从环境搭建、提示词工程到处理复杂表格的完整实战指南,帮助用户高效构建自动化文档处理流水线,彻底重塑文档处理工作流。

yog99的博客 606

VC++界面一揽子解决方案

http://www.vchelp.net/source/submit/mtgis.htmVC++界面一揽子解决方案(千禧版)/开发VC程序高级界面 ======================================================= “酒香不怕巷子深”并不是在任何情况下都适用!至少在这个时代! 别具一格的程序外观足以影响用户的选择。拥有友好而富于个性的用

oldmonsterman的专栏 2601

JSSIP实战:5分钟搞定WebRTC电话功能(附完整代码示例)

本文通过JSSIP库实战演示如何在Web应用中快速集成WebRTC电话功能。文章提供了从环境准备、SIP服务器连接到完整代码示例的详细步骤,涵盖用户注册、拨号接听、媒体流处理等核心环节,并针对常见问题给出排查方案,帮助开发者高效实现网页端实时语音通信。

u8v9w0x1y的博客 517

vc++ api 双缓冲绘图

当绘制动态图形时,会遇到图像闪烁的情况,分析一下原因: 电脑屏幕一般都是60HZ的,也就是说一秒钟刷新60次, 但是api绘图却没这么快,本身绘图就要循环,这里面还要加上描点连线, 我们把绘图看成一个个片段,就像电影一样,片段链接在一起就是个动态图像, 这里存在一个问题, 如果说这一个片段能同步屏幕刷新速度,也就是说画好一张图的时候,屏幕还没刷新一次,或者正巧要刷新, 那绘图肯定是完美的

bitwater的空间 1715

材料带隙预测(图神经网络)(⭐⭐)—— 用晶体图网络预测钙钛矿材料的能带隙,加速光伏材料筛选。技术栈:CGCNN、MEGNet、Materials Project数据集

钙钛矿太阳能电池以其高效率、低成本的优势迅速崛起,但传统“试错法”材料筛选效率极低,严重制约了光伏技术的迭代速度。近年来,基于图神经网络的材料带隙预测方法,特别是晶体图神经网络(CGCNN)和材料图网络(MEGNet),为这一问题提供了革命性的解决方案。本文系统梳理了材料带隙预测从传统计算到深度学习的演进历程,深入剖析了CGCNN与MEGNet的架构设计、数学原理及创新机制,详细阐述了Materials Project数据集的构建、特征工程与处理策略。

2201_76125393的博客 47

手把手教你学SOC芯片架构--NoC(片上网络,Network on Chip)全方位解析

​、​。

MHD0815的博客 864

VC++2010开发数字图像系统1

VS2010编程小技巧:1.注意在文档类C..Doc中使用和在视图类C..View中使用MessageBox函数时的参数不相同,不要用错。2.创建与控件关联的指针变量时,一定要注意初始化,不要形成垂悬指针,否则会出现“烫烫烫烫..."”屯屯屯...的乱码。 这里我们利用自己的图像函数库去处理数字图像,在掌握基本方法和基本理论后再去结合OpenCV和matlab去实现算法。 新建一基于单文档

烟雨平生 1268

乐企增值税及附加税费(一般纳税人适用)申报表填报能力说明文档V3.009

申报表填报,是指企业在自有业务系统中将算税结果数据按预填规则要求加工汇总后,进行申报表填报的过程。申报表填报前对纳税申报所需的前提条件进行校验。校验通过后,应用前序算税结果数据及预填规则进行纳税申报表预填,生成申报表数据。申报表数据通过申报业务规则校验后,经纳税人确认即完成申报表填报业务。

记录点滴 345

VC++界面一揽子解决方案 (转)

VC++界面一揽子解决方案 (转)[@more@].NET/source/submit/mtgis.htm">http://www.vchelp.net/source/submit/mtgis.htm VC++界面一揽...

csd3176的博客 86

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

vc++ 20个小技巧

一、打开CD-ROM mciSendString("Set cdAudio door open wait",NULL,0,NULL); 二、关闭CD_ROM mciSendString("Set cdAudio door closed wait",NULL,0,NULL); 三、关闭计算机 OSVERSIONINFO OsVersionInfo; //包含操作系统版本信息的数据结构 O

oceanark的博客 1047

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: VC++60 第十章 绘制图形
下一篇: VC++60 第十二章 列表框和组合框
GL_a_
博客等级 码龄11年 29粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值