首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

Gdiplus:Image:FromFile(.)没法读入文件

2014-06-05 
Gdiplus::Image::FromFile(..)无法读入文件?我的代码如下:int __fastcall CTestDlg::SetTransparent(LPWST

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类发现还是不行,为什么呢? 请问这样问题如何解决,大家帮帮忙啊,谢谢了!

[解决办法]
也许文件名无效或者不是可识别的图形。可以看一下GDIPlus的状态值。
[解决办法]
感觉WideCharToMultiByte(CP_UTF8,0,path,-1,name,strlen(name),0,0); 这个函数在做WCHAR*转换path字符的时候出错,所以后面你open的时候文件名就出错了。

[解决办法]
应该是你的文件路径的问题,导致加载文件失败,而你又不加判断得使用了指针m_Image

热点排行