读书人

用内存中储存的图片文件创建GDI+的B

发布时间: 2012-09-07 10:38:15 作者: rapoo

用内存中储存的图片文件,创建GDI+的Bitmap对象的问题。
我的一小段代码:

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();

读书人网 >VC/MFC

热点推荐