问题描述
我正在编写一个将 PNG 图片从资源文件加载到 Gdiplus::Image
变量的函数。这是我写的函数:
bool CPngImage2::LoadImage(HINSTANCE hInstance,LPCTSTR pszResourceName)
{
ASSERT(m_pImage==NULL);
if (m_pImage!=NULL) return false;
HRSRC hResource=NULL;
HGLOBAL hGlobal=NULL;
IStream * pIStream=NULL;
try
{
hResource = FindResource(hInstance,pszResourceName,TEXT("PNG"));
if (hResource == NULL)
{
int err = GetLastError();
CString errstr;
errstr.Format(L"FindResource Error!\nError Code: %d",err);
MessageBox(NULL,errstr,NULL,MB_ICONERROR | MB_OK);
throw 0;
}
hGlobal=LoadResource(hInstance,hResource);
if (hGlobal==NULL)
{
int err = GetLastError();
CString errstr;
errstr.Format(L"LoadResource Error!\nError Code: %d",MB_ICONERROR | MB_OK);
throw 0;
}
LPVOID pImageBuffer=LockResource(hGlobal);
if (pImageBuffer == NULL)
{
int err = GetLastError();
CString errstr;
errstr.Format(L"LockResource Error!\nError Code: %d",MB_ICONERROR | MB_OK);
throw 0;
}
DWORD dwImageSize=SizeofResource(hInstance,hResource);
if (dwImageSize == 0)
{
int err = GetLastError();
CString errstr;
errstr.Format(L"SizeofResource Error!\nError Code: %d",MB_ICONERROR | MB_OK);
throw 0;
}
CreateStreamOnHGlobal(NULL,TRUE,&pIStream);
if (pIStream==NULL)
{
int err = GetLastError();
CString errstr;
errstr.Format(L"CreateStreamOnHGlobal Error!\nError Code: %d",MB_ICONERROR | MB_OK);
throw 0;
}
HRESULT ret = pIStream->Write(pImageBuffer,dwImageSize,NULL);
if (ret != S_OK)
{
int err = GetLastError();
CString errstr;
errstr.Format(L"pIStream->Write Error!\nError Code: %d\nHRESULT return value: %d",err,ret);
MessageBox(NULL,MB_ICONERROR | MB_OK);
throw 0;
}
m_pImage = Image::FromStream(pIStream);
if ((m_pImage == NULL) || (m_pImage->GetLastStatus() != Gdiplus::Ok))
{
int err = GetLastError();
CString errstr;
errstr.Format(L"Image::FromStream Error!\nError Code: %d\nImage Status: %d",(m_pImage == NULL ? -1 : m_pImage->GetLastStatus()));
MessageBox(NULL,MB_ICONERROR | MB_OK);
throw 0;
}
if (pIStream!=NULL) pIStream->Release();
if (hGlobal!=NULL)
{
UnlockResource(hGlobal);
FreeResource(hGlobal);
}
return true;
}
catch (...)
{
if (pIStream!=NULL) pIStream->Release();
if (hGlobal!=NULL)
{
UnlockResource(hGlobal);
FreeResource(hGlobal);
}
return false;
}
return true;
}
图像::FromStream 错误! 错误代码:0 图像状态:-1
而 m_pImage 的值为 NULL。 我想知道是什么导致了这个错误,我该如何解决。
环境信息:
系统:Windows 10 Professional Workstation Version 21H1
IDE:Visual Studio 2019(最新版本)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)