1.  通过GDI+加载(加载图片 + 显示图片)

(1)先加载图片方法:

//方法I
//CString转WCHAR(因为Image构造函数参数为宽字符)
int l = MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)sFile, -1, NULL, 0);
wchar_t *w = new wchar_t[l];
memset(w, 0, l);
INT N = MultiByteToWideChar(CP_ACP, 0, (LPCTSTR)sFile, -1, w, l);
Image image(w);
delete[]w;//方法II
CT2CW strFileName(sFile);
Image image(strFileName);//方法III
CT2CW strFileName(sFile);
Image *pImage = Image::FromFile(strFileName);

(2)显示图片方法 --- 通常需要在重载方法 OnEraseBkgnd() 中来画图片

//方法I..图片直接显示到窗体上
HDC hDC = ::GetDC(m_hWnd);
Graphics graphics(hDC);
graphics.DrawImage(&image, 0, 0, image.GetWidth(), image.GetHeight());
//或graphics.DrawImage(pImage, 0, 0, pImage->GetWidth(), pImage->GetHeight());//方法II..图片直接显示到窗体上
CDC *pDC = GetDC();
Graphics graphics(pDC->m_hDC);
graphics.DrawImage(&image, 0, 0, image.GetWidth(), image.GetHeight());//方法III..图片直接显示到窗体上
CClientDC dc(this);
Graphics graphics(dc.m_hDC); //通过设备描述表句柄实例化一个 gdi+ Graphics 类成员
graphics.DrawImage(pImgBmp, 0, 0)//方法IV..图片显示到PictureCtrl控件上
CClientDC *pDC = new CClientDC(GetDlgItem(IDC_STATIC_PIC)); //注意CWindowDC,CClientDC,CPaintDC的区别
Graphics graphics(pDC->m_hDC);
graphics.DrawImage(&image, 0, 0, image.GetWidth(), image.GetHeight());
delete pDC;

例如:

void CTestDlg::LoadPng()
{CDC *pDC = GetDC();Graphics graphics(pDC->m_hDC);CT2CW strFileName(sFile);Image image(strFileName);graphics.DrawImage(&image, 10,10, image.GetWidth(), image.GetHeight());
}

2. 通过CBitmap加载窗体背景

//先添加并初始化成员变量
CBitmap m_BackBmp;
m_BackBmp.LoadBitmap(IDB_BITMAP1);//再背景窗体重绘
BOOL CConnectDlg::OnEraseBkgnd(CDC* pDC)
{// TODO:  在此添加消息处理程序代码和/或调用默认值CDialogEx::OnEraseBkgnd(pDC);//窗体背景图片CRect rcClient;GetClientRect(&rcClient);BITMAP bm;m_BackBmp.GetBitmap(&bm);CDC memDC;memDC.CreateCompatibleDC(pDC);CBitmap *pOldBmp = memDC.SelectObject(&m_BackBmp);pDC->StretchBlt(0, 0, rcClient.Width(), rcClient.Height(), &memDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);memDC.SelectObject(pOldBmp);memDC.DeleteDC();return TRUE;
}

2. 通过Cimage加载图片

//用于擦出背景 (场景:OnTimer()中定时擦出背景,OnEraseBkgnd()重绘背景,可实现图片的移动动画效果)
<span style="font-family: Arial, Helvetica, sans-serif;">HWND hwnd = GetSafeHwnd(); //获取窗口的HWND</span>
<span style="font-family: Arial, Helvetica, sans-serif;">::InvalidateRect( hwnd, NULL, true ); //或者 ::InvalidateRect( hwnd, NULL, false );</span>
<span style="font-family: Arial, Helvetica, sans-serif;">::UpdateWindow(hwnd);</span>

CDC *pDC = GetDC();
CImage Image;
Image.Load(strPath);
if (Image.IsNull())
{MessageBox(_T("没加载成功"));return -1;
}
if (Image.GetBPP() == 32) //确认该图像包含Alpha通道
{int i;int j;for (i=0; i<Image.GetWidth(); i++){for (j=0; j<Image.GetHeight(); j++){byte *pByte = (byte *)Image.GetPixelAddress(i, j);pByte[0] = pByte[0] * pByte[3] / 255;pByte[1] = pByte[1] * pByte[3] / 255;pByte[2] = pByte[2] * pByte[3] / 255;}}
}
Image.Draw(pDC->m_hDC,0,0);
Image.Destroy();
ReleaseDC(pDC);

3. 加载.ico

(1).使用函数 LoadIcon() 载入图标。因为LoadIcon() 是类 CWinApp 的成员函数,同时函数 LoadIcon() 返回所载入图标的句柄。所以我们采用以下方法来调用函数 LoadIcon():

//加载ICO图片
HICON hIcon = AfxGetApp()->LoadIcon(IDI_ICON2);
m_btnCannel.SetIcon(hIcon);  //或 ((CButton*)GetDlgItem(IDC_BUTTON1))->SetIcon(m_hicn1);

但是这种方法并不能加载系统预定义图标,在CWinApp中还有个装载图标的函数,

HICON LoadStandardIcon( LPCTSTR lpszIconName ) const;
如:
AfxGetApp()->LoadStandardIcon(IDI_QUESTION);

(2)全局::LoadIcon(), ::SetIcon()

当然在MFC中可以调用全局函数来加载图标,但是如果要装载自己添加的图标资源,要注意下面几种写法:

HICON hIcon = ::LoadIcon(AfxGetApp()->m_hInstance,(LPCTSTR)IDI_ICON1);
HICON hIcon = ::LoadIcon(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(ICON1));
HICON hIcon = ::LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(ICON1));
::SetIcon(hIcon, FALSE);
或
::SetIcon(::LoadIcon(NULL, MAKEINTRESOURCE(ICON1)), FALSE);

以上都是正确的.由于添加的图标资源ID不是字符型的(在resource.h定义),所以要转换:
在前面加上LPCTSTR强制转换
用MAKEINTRESOURCE转换
它的定义如下:
#define MAKEINTRESOURCE(i) (LPCTSTR)((DWORD)((WORD)(i))),它的作用就是将资源标识转换为名称字符串

(3). 全局::LoadImage()

// Find correct resource handle
HINSTANCE hInstResource = AfxFindResourceHandle(MAKEINTRESOURCE(IDI_ICON1), RT_GROUP_ICON);// Set icon when the mouse is IN the button
HICON hIconIn = (HICON)::LoadImage(hInstResource, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 0, 0, 0);

(4). 从文件加载

HICON hIconIn = (HICON)::LoadImage(NULL,"MyButtonBG.ico",IMAGE_ICON,100,150,LR_LOADFROMFILE);

4. 加载.bmp

//加载BMP图片
CBitmap Bitmap;
Bitmap.LoadBitmap(IDB_BITMAP1);
HBITMAP hBitmap = (HBITMAP)Bitmap.Detach();
m_btnCannel.SetBitmaps(hBitmap, RGB(255, 255, 255));  

加载图片的方法(I)相关推荐

  1. ajax静态加载图片,JQuery实现Ajax加载图片的方法

    本文实例讲述了JQuery实现Ajax加载图片的方法.分享给大家供大家参考,具体如下: 最近在学习JQuery,想从原理上模拟一下无刷新的相册浏览. 最先想到的思路是利用缓存,也就是先显示提示消息,然 ...

  2. java imageview的使用_Android使用控件ImageView加载图片的方法

    在 Android 加载图片一般使用 ImageView,这里简单记录一下这个控件的使用方法. 最简单就是在 xml 里直接使用 ImageView 标签: android:orientation=& ...

  3. Qt 中实现在控件中点击鼠标,就在鼠标点击处加载图片的方法

    首先应该知道,QLabel类是没有点击事件的.我们需要点击鼠标,那么必须重写一个QLabel类去继承原来的QLabel.比如说我定义PutPicLabel来继承QLabel. 在头文件中应该这么写: ...

  4. html 懒加载图片实现方法

    懒加载逻辑 一般如果场景比较大,滚动条很长,图片比较多的情况下,不使用赖加载图片会一下子把资源都加载,导致性能很慢,甚至没有滚动到下面也加载了,很浪费资源 现在通过滚动事件来处理图片加载,我们先吧要显 ...

  5. python加载图片的方法_python从网络读取图片并直接进行处理的方法

    python从网络读取图片并直接进行处理的方法 更新时间:2015年05月22日 10:09:08 作者:pythoner 这篇文章主要介绍了python从网络读取图片并直接进行处理的方法,涉及cSt ...

  6. java怎么将加载图片消除_Java中加载图片的方法

    Java中添加图片,我知道有两种方法 用new ImageIcon("地址")函数,将图片放到JLabel中,然后把JLabel放到需要的地方就可以了 ImageIcon bg=n ...

  7. 按需加载图片(图片懒加载)

    前言 按需要加载图片,这是一个非常实用的功能,不仅可以提高网站的性能,还可以为你节省流量.对于用虚拟主机的朋友来说,如果你的网站是一个图片网站或者图片比较多的网站,那么图片懒加载功能真不能少. 原理 ...

  8. android grideview 图片png透明,Android完美解决GridView异步加载图片和加载大量图片时出现Out Of Memory问题...

    众所周知,我们在使用GridView或者ListView时,通常会遇到两个棘手的问题: 1.每个Item获取的数据所用的时间太长会导致程序长时间黑屏,更甚会导致程序ANR,也就是Application ...

  9. VC从文件中加载图片

    用MFC做GDI开发的朋友肯定熟悉CBitmap类,该类封装了HBITMAP对象,简化了关于HBITMAP的API操作,如LoadBitmap方法可直接加载资源中指定ID的图片,但是很多情况下我们需要 ...

最新文章

  1. 机器学习常用损失函数小结
  2. 看的一个pdf说的。。大型网站架构演变
  3. 制作支付页面弹框html,JS实现仿微信支付弹窗功能_蜡烛_前端开发者
  4. Android Handler的内存泄露场景分析
  5. 跨区域报考计算机考试可以吗,考生注意!2020年医师资格机考跨题型不可以回看(附上机操作系统)...
  6. Linux设置node的process.env.NODE_ENV
  7. wordpress如何压缩HTML代码
  8. 【BZOJ 3531 Sdoi2014】旅行【动态开点线段树+树链剖分】
  9. Python建立数据库
  10. Android常用的 adb shell命令
  11. Emmagee工具的使用以及csv数据分析
  12. 咱用AppDesigner开发复现了一款我国古老的桌游 —【升官图】
  13. 怎么更换电脑的默认浏览器?
  14. 如何解决Win10电脑网速慢的问题?
  15. RNN中的Teacher Forcing
  16. R2S设置openWrt软路由
  17. 互联网摸鱼日报(2022-10-08)
  18. linux 扫描磁盘柜,Linux下做磁盘阵列和各种热备份
  19. 我的时间都去哪里了?
  20. Qt-使用QString输出数字上标(不要再用x2或x^2表示平方啦)

热门文章

  1. Tio实现检测客户端是否在线发送钉钉群消息
  2. 【自动化】火车头采集器
  3. 桌面计算机右键属性不弹窗,Win7系统右键计算机属性不见了的解决方法
  4. ReactDOM.render 是如何串联渲染链路的?(中)
  5. Docker Swarm集群部署
  6. 跨平台C++ Qt数据库管理系统设计与实战:从理论到实践的全面解析
  7. ubuntu 强力卸载软件
  8. 给你一份架构部操作手册,你会用么?
  9. 语音控制单片机(python做的上位机控制arduino)
  10. AJAX 和 JSON学习笔记