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中位图 异型的位图对话框

STM32 FATFS文件系统按行读取SD卡数据

STM32 SD数据实现按行读取

qq_32216815的博客 7826

C++实现BitMap位图类

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

m0_64428335的博客 3583

【AI Infra】【RLHF框架】VeRL中WorkerGroup与Ray资源调度的协同机制剖析

本文深入剖析了VeRL框架中WorkerGroup与Ray资源调度的协同机制。通过解析Ray Placement Group的资源抽象和VeRL的RayResourcePool封装,详细阐述了WorkerGroup如何与底层资源精确绑定,并实现RLHF训练中异构、多阶段任务的灵活资源分配与动态调整,为大规模分布式强化学习训练提供了高效解决方案。

weixin_29204205的博客 390

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

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

eit520的专栏 4596

[CTFSHOW]JWT

文章目录前言JWT简介CTFSHOW Web345CTFSHOW Web346前置知识开始做题CTFSHOW Web347CTFSHOW Web348CTFSHOW Web349CTFSHOW Web350前置知识利用WP如何防御 前言 有些师傅向我咨询WP,索性就发了吧,其实早就写好了,只是懒,在github仓库里囤着 JWT简介 可以看看我的Github总结给自己看的,Y4tacker CTFSHOW Web345 首先打开题目,查看源码,接下来访问/admin被跳转回主页啥也没有发生 where is

Y4tacker的博客 6045

无需SLAM建图,直接生成Gazebo仿真环境的二维代价地图的功能包pgm_map_creator适配ROS Noetic编译报错及解决方法

在ROS Noetic中,使用`pgm_map_creator`功能包直接生成Gazebo仿真环境的二维代价地图时,可能会遇到各种编译和运行错误。本篇博客详细解析了在适配ROS Noetic过程中常见的报错及其解决方法,包括Boost文件结构更新、C++版本兼容性、Gazebo函数名变更、链接库缺失以及protobuf文件加载错误。通过逐步排查和修改,如更换头文件路径、调整C++标准、更新CMakeLists.txt文件等,成功解决了这些问题,使得`pgm_map_creator`功能包能够顺利编译和运行。

慕羽★的博客 2261

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

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

oldmonsterman的专栏 2601

32位快速加法器设计

32位快速加法器设计

好好学习,天天向上 3290

vc++ api 双缓冲绘图

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

bitwater的空间 1715

下拉式菜单设计——Power BI

Power BI导航设计:多级下拉菜单

weixin_41542593的博客 5434

opencv案例实战——银行卡模式匹配识别

在之前的几篇文章中我们已经介绍了opencv的一些基础知识,本篇文章我们将结合一个案例运用之前的知识并且学习opencv中模式匹配的应用,用到的知识点如果有不清楚的可以查看上面列出来的系列文章。具体代码会放在最后。

艾醒的博客 1339

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

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

烟雨平生 1268

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

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

csd3176的博客 86

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

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

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: 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、付费专栏及课程。

余额充值