VC2019 使用GDI+ 显示PNG图片
新建一個單文檔工程;
添加一個菜單;在視類中處理此菜單;
視類CPP文件添加:
? ??#include "gdiplus.h"
視類.h文件添加成員:
? ??ULONG_PTR m_gdiplusToken;
視類.h文件頭部添加:
? ??#pragma comment(lib,"gdiplus.lib")
? ? 這是載入GDI+的庫;
gdiplus.h,在 外部依賴項 中可以發(fā)現(xiàn);
先在VC資源中導(dǎo)入png1.png;操作失敗;將文件拷貝到項目res文件夾下,并修改.rc文件;.rc文件包括如下一句;
IDB_PNG1 ? ? ? ? ? ? ? ?PNG ? ? ? ? ? ? ? ? ? ? "res\\png1.png"
菜單處理函數(shù):
void CimageDemo1View::OnMenu32771() {// TODO: 在此添加命令處理程序代碼Gdiplus::GdiplusStartupInput gdiplusStartupInput;Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput, NULL);CClientDC* pDC = new CClientDC(GetDlgItem(IDB_PNG1));//CClientDC* pDC = new CClientDC();CRect rect;//GetDlgItem(IDB_PNG1)->GetWindowRect(&rect);rect.top = 0;rect.left = 0;rect.bottom = 350;rect.right = 800;Gdiplus::Graphics graphics(pDC->m_hDC); // Create a GDI+ graphics object Gdiplus::Image image(_T("png1.png")); // Construct an image graphics.graphics.DrawImage(&image, 0, 0, image.GetWidth(), image.GetHeight());delete pDC;//Gdiplus::GdiplusShutdown(m_gdiplusToken); }然后還需要在源碼目錄放一個png1.png;
代碼是先根據(jù)資源中的png生成DC指針;由此DC構(gòu)造Gdiplus::Graphics類別的對象graphics;然后畫png1.png到此graphics對象上;
運行;
有如下問題;
? ? GetDlgItem(IDB_PNG1)->GetWindowRect(&rect);
此句引發(fā)異常:讀取位置 0x00000020 時發(fā)生訪問沖突;
根據(jù)網(wǎng)上資料有:
? ? vs不支持通過AfxGetMainWnd()獲取窗口句柄,把AfxGetMainWnd()->m_hWnd改成AfxGetApp()->m_pMainWnd->m_hWnd即可;
先改為直接設(shè)置rect的值;
然后最后這句是釋放GDI+庫,會引發(fā)?寫入位置 0x02EF12BC 時發(fā)生訪問沖突;先注釋掉;
然后是圖像并沒有畫到本窗口的DC上,是畫到了桌面的DC上;
下回再搞;如果是直接從Debug目錄運行.exe文件,此目錄也需要放一個png1.png;
總結(jié)
以上是生活随笔為你收集整理的VC2019 使用GDI+ 显示PNG图片的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vc2019切分位图图像带动态创建工具条
- 下一篇: VC++2019 使用wininet下载