Gdiplus::Image::FromFile(..)无法读入文件?
我的代码如下:
int __fastcall CTestDlg::SetTransparent(LPWSTR lpSkinFile, int nTran)
{
int Width,Height;
m_Image=Gdiplus::Image::FromFile(lpSkinFile); // Use GDI+ load image
Width = m_Image->GetWidth();
Height = m_Image->GetHeight();
...
}
一到这里就显示: "Unhandled exception in Test.exe:0xc0000005:Access exception."
其中lpSkinFile的值用SetTransparent(L"F:\\Test\\Debug\\a.png", 100);传递的,我加入断点后调试,发现m_Image在之前的值是0xcccccccc,执行到 m_Image=Gdiplus::Image::FromFile(lpSkinFile);后就变为0x00000000; 后来我试图从流中读取,代码如下:
void CTestDlg::InitialImage(LPWSTR path , Image *image)
{
char name[MAX_PATH];
WideCharToMultiByte(CP_UTF8,0,path,-1,name,strlen(name),0,0);
CFile file;
try
{
file.Open (path,CFile::modeRead|CFile::typeBinary);
}
catch(CFileException *p)
{
p->ReportError();
return;
}
DWORD len = file.GetLength ();// 申请全局空间
HGLOBAL hMem = GlobalAlloc(GMEM_FIXED, len);
BYTE* pmem = (BYTE*)GlobalLock(hMem);
file.ReadHuge (pmem,len);// 从文件读出来。
IN IStream* pstm;
CreateStreamOnHGlobal(hMem,FALSE,&pstm);
image=Gdiplus::Bitmap::FromStream(pstm);// 从流加载
GlobalUnlock(hMem);
GlobalFree(hMem);
pstm->Release();
file.Close ();
}
我把m_Image=Gdiplus::Image::FromFile(lpSkinFile);换为m_Image=InitialImage(lpSkinFile,m_Image);发现和上面的问题一样;再后来,我用Bitmap类代替Image类发现还是不行,为什么呢? 请问这样问题如何解决,大家帮帮忙啊,谢谢了!