MFC加载位图文件

MFC中加载位图资源到窗口中 一、 从磁盘中加载位图到窗口中---操作步骤 1. 创建一个单文档的应用程序,工程名为LoadBmp。 2. 在视图类中添加一个成员变量m_hBmp. 3. 在视图类的构造函数中调用LoadImage方法从磁盘中加载文件。 CLoadBmpView::CLoadBmpView() { // TODO: add construction code here m_hBmp=(HBITM 阅读详情
{
        CBitmap bmp;

        bmp.m_hObject = ::LoadImage(::AfxGetInstanceHandle(), m_filename, IMAGE_BITMAP, 0,0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);//从文件中加载,

        if (NULL == bmp.m_hObject)
        {
            return;
        }

        BITMAP  bmInfo;

        bmp.GetObject(sizeof(bmInfo), &bmInfo);

        w = bmInfo.bmWidth;
        h = bmInfo.bmHeight / m_framenumber;
}

这是最常用的加载位图文件的方法,非常简单易用。但是,今天我碰到了一个到现在都不知道原因的问题。

今天有位美术的同事说我的工具载入图片显示不了,我尝试了很多次,文件没问题,路径也没问题,就是LoadImage失败。但是该图片是正常方法生成的,其他工具打开也正常。不过我偷懒,没去做位图文件的数据分析吐舌头。所以我在思考,是不是LoadImage的支持问题。


换了另一种方法

{
        IStream *pStm;
        CFileStatus fstatus;
        CFile file;
        LONG cb;
        //打开文件并检测文件的有效性
        if (file.Open(m_filename,CFile::modeRead)&&
            file.GetStatus(m_filename,fstatus)&&
            ((cb = fstatus.m_size) != -1))
        {
            HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb);
            LPVOID pvData = NULL;
            if (hGlobal != NULL)
            {
                pvData = GlobalLock(hGlobal);
                if (pvData != NULL)
                {
                    //file.ReadHuge(pvData, cb);  //6.0中可能是用这个函数
                    file.Read(pvData, cb);  //VC2005.NET中用这个函数
                    GlobalUnlock(hGlobal);
                    CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);
                }
            }
            file.Close();
        }
        else
        {
            return;
        } //打开文件结束
        //显示JPEG和GIF格式的图片,GIF只能显示一帧,还不能显示动画,
        //要显示动画GIF请使用ACTIVE控件。
        IPicture *pPic;
        //load image from file stream
        if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic)))
        {
            OLE_XSIZE_HIMETRIC hmWidth;
            OLE_YSIZE_HIMETRIC hmHeight;
            pPic->get_Width(&hmWidth);
            pPic->get_Height(&hmHeight);

            CDC dc;

            dc.CreateCompatibleDC(0);
            CSize sz( hmWidth, hmHeight );
         dc.HIMETRICtoDP( &sz ); // 转换 MM_HIMETRIC 模式单位为 MM_TEXT 像素单位

            w = sz.cx;
            h = sz.cy / m_framenumber;
        }
        else
        {
            return;
        }
        return;
    }
代码多了几倍,用的接口也都了很多,结果OK。

但是有一个问题要注意,网上找到的实例获取像素宽高一般是:

double fX,fY; 
fX = (double)pDC->GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pDC->GetDeviceCaps(HORZSIZE)*100.0); 
fY = (double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pDC->GetDeviceCaps(VERTSIZE)*100.0); 

我试了,结果不对,所以特地创建了一个CDC来转换。

把我的图片附上,有兴趣的朋友可以试试。


如何向CImageList中加入位图文件  在MFC中CImageList类封装了图象列表控件的功能,图象列表控件是相同大小图象的一个集合,用于应用程序中大规模图标的存储,该控件是不可见控件,通常与其它控件一起使用,来为其它控件提供图标资源。图象的每个集合中均以0为图象索引基数,可以把这些图标看成是以数组方式存储的,图像列表通常由大图标或位图构成,其中包含位图模式,实际上,所有的在同一个图象列表中的图标都被存储在一个屏幕设备的位图中。 阅读详情

相关推荐

MFC中图像输出

图像输出 利用CDC类的位图图函数输出位图到设备上下文 BOOL BitBlt(int x,int y,int width,int height,CDC *pSrcDC,int xSrc,int ySrc,DWORD dwRop) x,y表示目标区域左上角坐标 widthheigth 表示位图分大小 pSrcDC 表示源设备上下文指针 xSrc,ySrc表示源设备上下文起点坐标,函数从该起点复制位图到目标设备 dwRop 表示光栅操作代码 BOOL

JJF代码男孩 2413

MFC API——》LoadImage

函数功能:该函数装载图标,光标,或位图。 函数原型:HANDLE LoadImage(HINSTANCE hinst,LPCTSTR lpszName,UINT uType,int cxDesired,int cyDesired,UINT fuLoad);

liuxiaomao1988的专栏 2257

基于Sentinel-2(哨兵2)遥感卫星的植被覆盖度提取

基于Sentinel-2(哨兵2)遥感卫星的植被覆盖度提取 一、Sentinel-2简单介绍 哨兵-2系列卫星的主要载荷多光谱成像仪拥有13个谱段,从可见光到近红外再到短波红外,空间分辨率从10m到60m,能实现全所未有的陆地海洋监测水平。其幅宽高达290KM,且A、B双星组合,覆盖能力比美国Landsat8卫星强很多。目前哨兵-2A和哨兵-2B已经实现了5天的重访时间,即使在之前仅有单颗卫星时,...

weixin_44143671的博客 2万+

MFC中LoadImage()函数返回空值

在使用LoadImage()函数来加载图片时,有时会返回一个空值。 解决方法: 在使用多字节字符集环境下,使用如下代码: if( !f.Open(_TEXT("banana.bmp"), CFile::modeRead, &e )) { hbitmap = (HBITMAP)LoadImage(NULL,_TEXT("banana.bmp"),IMAGE_BITMAP,0

三思 3578

LibreNMS实战:5分钟搞定Docker部署与中文配置(附常见问题排查)

本文详细介绍了如何使用Docker在5分钟内快速部署LibreNMS,并完成中文界面优化。从环境准备到容器启动,再到中文语言包安装和系统配置调整,提供了完整的实战指南。同时,文章还包含常见问题排查和性能调优建议,帮助用户高效搭建网络监控系统。

e1f2g的博客 1281

【Flutter 问题系列第 85 篇】Xcode 运行 Flutter 提示 The Dart VM Service was not discovered after 60 seconds.

在 Xcode 上运行 Flutter 时提示 `The Dart VM Service was not discovered after 60 seconds. This is taking much longer than expected...`,意思是 `60秒后未发现Dart虚拟机服务。这比预期的要长得多`

“Allen Su”的博客 2236

MFC加载图标,位图。LoadImage LoadIcon, LoadBitmap

MFC加载图标和位图,有2种方式,一种是从工程的资源中加载,一种是从文件加载。 先说图标的,图标格式为.ico,也就是我们常说的ICON图片。 我们直观的希望是加载ico使用LoadIcon()函数,加载bitmap图片使用LoadBitmap函数,事实上,的确可以这样。 1、加载图标 LoadIcon函数要加载位图,要使用CWinApp的成员函数LoadIcon才行。当你查看MS

曾伟的专栏 2万+

linux驱动由浅入深系列:块设备驱动之一(高通eMMC分区实例)

linux驱动由浅入深系列:块设备驱动之一(高通eMMC分区实例)linux驱动由浅入深系列:块设备驱动之二(块设备驱动结构分析)块设备驱动的模型还是基本基于字符设备驱动的,可以简单理解为块设备仅仅增加了操作缓冲区,对用户请求顺序进行队列重拍等等。字符设备驱动的相关分析可以查看本博客相关的博文。 按照本博客的行文习惯,在具体分析块设备驱动代码之前,我们会从整体上了解一下研究对象的特征,以及用户空间...

Radia的专栏 1万+

LoadImage函数的用法

LoadImage函数的用法 通过文件路径来加载外部图标资源。相同的方式可以加载位图、光标、动态光标的资源。

weixin_43411789的博客 6694

ANSYS——“There is at least 1 small equation solver pivot term”问题的解决办法

ANSYS——“There is at least 1 small equation solver pivot term”问题的解决办法

python_AI_fans的博客 1万+

cesium实战目录必看

本文作者长期从事GIS相关工作,专注于三维和地图可视化领域,熟悉Cesium、Three.js、WebGL等开发框架。文章目录展示了作者在Cesium应用中的多项技术实践,涵盖水面反射、离屏渲染、后处理效果、地形裁剪、Shader着色器、动态单体化、气象图、缓冲区域、坡度和坡向分析、三维热力图、通视分析、态势标绘等多个方面。这些内容为开发者提供了丰富的技术参考,展示了Cesium在三维可视化中的强大功能和应用场景。

God's asylum的博客 8718

MFC使用LoadBitmap方法加载位图文件失败解决方案(转)

MFC使用LoadBitmap方法加载位图文件失败解决方案(转)

10年职场两茫茫,35岁凄凉奈若何 1012

gseapy python包GO、KEGG富集(注释)分析

文档案例参考:https://gseapy.readthedocs.io/en/latest/gseapy_example.html#Over-representation-analysis-by-Enrichr-web-services安装:建议安装最新版(这里安装的1.04):https://github.com/zqfang/GSEApy/releases。

weixin_42357472的博客 3610

打开位图文件的方法

在View类的事件里面选中ID_FILE_OPEN,编写COMMAND函数,在这个消息响应函数中编写如下代码:CString  strfilepath; //获取文件的路径  m_bOpen=true; //判断是不是打开文件void CLoadImageView::OnFileOpen(){  m_bOpen=true;    CFileDialog pCFileDialog(tru

蛋蛋的专栏 1910

Open-Sora代码详细解读(1):解读DiT结构

目前开源的DiT视频生成模型不是很多,Open-Sora是开发者生态最好的一个,涵盖了DiT、时空DiT、3D VAE、Rectified Flow、因果卷积等Diffusion视频生成的经典知识点。本篇博客从Open-Sora的代码出发,深入解读背后的原理。

沉迷单车的追风少年 2264

蓝牙模块HM-10手册

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

vs2010 单文档MFC 通过加载位图文件作为客户区背景

实现效果:这个其实是一个非常常见的功能,大家都会考虑给自己简单的工程做一个背景界面。其实只要在view类中重载OnEraseBkgnd()这个函数就好了。代码如下:BOOL CdddView::OnEraseBkgnd(CDC* pDC) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CString string("b.bmp"); HBITMAP hbi

shiter编写程序的艺术 4792

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

位图文件结构及MFC显示

一、位图文件结构 位图文件由三部分组成:文件头 + 位图信息 + 位图像素数据。 1、位图文件头。位图文件头主要用于识别位图文件。以下是位图文件头结构的定义: [cpp] view plaincopytypedef struct tagBITMAPFILEHEADER { // bmfh       WORD    bfType;       DWORD   bfSize;

Jessoat的专栏 931

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

MFC中怎样将位图写入指定的Picture控件中,两种方式:1 加载已有位图 2读取位图文件;另外CreateDIBitmap的用法和StretchDIBits用法举例

注意着两种方式都要事先在对话框中拖picture控件,将其ID改为:IDC_PHOTO 看这篇文章之前建议先看一下下面这篇文章: VC下显示位图的几种方法     http://blog.youkuaiyun.com/ply421600/article/details/6692967 //方式一:通过加载一张已有的位图,并将其显示在指定的picture控件中 void CTestD

zhangyulin54321的专栏 6233

mfc 利用HBITMAP 和CBITMAP 显示位图文件

《工作笔记》 mfc 利用HBITMAP 和CBITMAP 显示位图文件 显示位图文件有n中方法: 1 利用双缓冲技术; 源码: void showBMP() { CString   str;      CString   filter="Bitmap    Files(*.bmp)|*.bmp|Wmf   Files(*.wmf)|*.wmf||";

autumn20080101的专栏 610

MFC显示位图的几种方法

MFC显示位图的几种方法 C++学习 2010-07-07 00:15:26 阅读119 评论0 字号:大中小 //在对话框内显示位图 CBitmap hbmp; HBITMAP hbitmap; //装载图片文件MM.bmp hbitmap=(HBITMAP)::LoadImage(::AfxGetInstanceHandle(),"MM.bmp",IMA

niuweixing007的专栏 746

打开并显示位图 mfc view

 头文件中CBitmap m_bitmap1; CRect rect;ondraw中 //////////////////////////打开位图文件    if(m_bitmap1.m_hObject) {         CDC dcImage;  if(!dcImage.CreateCompatibleDC(pDC))   MessageBox(NULL,"wrong",NULL

midie的专栏 2022

如何向 CImageList中加入位图文件

 在MFC中CImageList类封装了图象列表控件的功能,图象列表控件是相同大小图象的一个集合,用于应用程序中大规模图标的存储,该控件是不可见控件,通常与其它控件一起使用,来为其它控件提供图标资源。图象的每个集合中均以0为图象索引基数,可以把这些图标看成是以数组方式存储的,图像列表通常由大图标或位图构成,其中包含位图模式,实际上,所有的在同一个图象列表中的图标都被存储在一个屏幕设备的位图中。

dog333的专栏 924

《工作笔记》 mfc 利用HBITMAP 和CBITMAP 显示位图文件

显示位图文件有n中方法:1 利用双缓冲技术;源码:void showBMP(){CString   str;      CString   filter="Bitmap    Files(*.bmp)|*.bmp|Wmf   Files(*.wmf)|*.wmf||";   CFileDialog   dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OF

uniquechao的专栏 2048
上一篇: 机器的世界观
下一篇: 今日编译mipsel-linux的DirectFb碰壁及解决
robitmind
博客等级 码龄14年 35粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值