vc++加载透明png图片方法——GDI+和CImage两种
VS平台不用再单独下载GDI+了
实现PNG图片加载的两种方法
一.png加载
1.定义
GdiplusStartupinput m_Gdiplus
ULONG_PTR m_pGdiToken
ULONG_PTR m_pGdiToken
2.初始化
BOOL CPNGDlg::OnInitDialog()
{
{
GdiplusStartup(&m_pGdiToken, &m_Gdiplus, NULL);
3.头文件
#include <gdiplus.h>
using namespace Gdiplus;
4.实现
void CPNGDlg::OnPaint()
{
//picture控件 type=Owner Draw
//第一种,显示实际png图片,与控件大小无关
//CPaintDC *pDC = new CPaintDC(GetDlgItem(IDC_STATIC_PIC));也可以
CClientDC *pDC = new CClientDC(GetDlgItem(IDC_STATIC_PIC));
CRect rect;
GetDlgItem(IDC_STATIC_PIC)->GetWindowRect(&rect);
Graphics graphics(pDC->m_hDC); // Create a GDI+ graphics object
Image image(_T("1.png")); // Construct an image
graphics.DrawImage(&image, 0, 0, image.GetWidth(), image.GetHeight());
delete pDC;
/*
//第二种,铺满控件
Image image(_T("1.png")); //载入指定路径的图像文件
CWnd* pwnd = GetDlgItem(IDC_STATIC_PIC);//IDC_PIC 为图像控件的 ID
CDC* dc = pwnd->GetDC(); //获取图像控件的设备上下文
CRect rect;
pwnd->GetClientRect(&rect); //获取客户区域的信息
Graphics graph(dc->GetSafeHdc());
graph.DrawImage(&image, 0, 0, rect.Width(), rect.Height()); //在指定图像控件的区域中绘制图像
ReleaseDC(dc); //释放资源
*/
6.卸载
重载ExitInstance(或者析构函数),加入GdiplusShutdown(m_gdiplusToken);