用内存中储存的图片文件,创建GDI+的Bit地图对象的有关问题
用内存中储存的图片文件,创建GDI+的Bitmap对象的问题。
我的一小段代码:
显示图片的时候,有时图片右下角有一区域是乱的。而如果把最后两句注释掉,不释放hglobal,那图片就能正常显示。
似乎是创建的Bitmap对象使用了hglobal所指向的内存,释放掉hglobal后,那部分内存被覆盖了一些。
请问,应该怎么解决 或者 有什么更好的办法用内存中储存的图片文件,创建GDI+的Bitmap对象么?
------解决方案--------------------
HRESULT res=::CreateStreamOnHGlobal(hglobal, FALSE, &pStream);
===>> HRESULT res=::CreateStreamOnHGlobal(hglobal, TRUE, &pStream);
显示完后最后再 pStream->Release();
我的一小段代码:
- C/C++ code
//char * data,int datalen //data 指向内存中的图片文件,图片文件是网络上发过来的(直接保存在硬盘上,然后双击打开,图片很正常) //datalen 是图片文件的大小 HGLOBAL hglobal=0; IStream* pStream = NULL; hglobal = ::GlobalAlloc(GMEM_FIXED,datalen); ::memcpy(hglobal,data,datalen); HRESULT res=::CreateStreamOnHGlobal(hglobal, FALSE, &pStream); if (res == S_OK) { this->m_ep.GCaptchaBmp=new Bitmap(pStream,NULL); pStream->Release(); //.... } else { //.... } //.... if(hglobal) ::GlobalFree(hglobal); //图片是在之后的程序中显示
显示图片的时候,有时图片右下角有一区域是乱的。而如果把最后两句注释掉,不释放hglobal,那图片就能正常显示。
似乎是创建的Bitmap对象使用了hglobal所指向的内存,释放掉hglobal后,那部分内存被覆盖了一些。
请问,应该怎么解决 或者 有什么更好的办法用内存中储存的图片文件,创建GDI+的Bitmap对象么?
------解决方案--------------------
HRESULT res=::CreateStreamOnHGlobal(hglobal, FALSE, &pStream);
===>> HRESULT res=::CreateStreamOnHGlobal(hglobal, TRUE, &pStream);
显示完后最后再 pStream->Release();