我在VC2005里用GDI+做了个图片格式转换,转完我想删除源文件,但删不掉。第一次用GDI+,高手给看看,谢谢!    ULONG_PTR gdiplusToken;
    GdiplusStartupInput gdiplusStartupInput;
    GdiplusStartup(&gdiplusToken,&gdiplusStartupInput,NULL);    WCHAR* pImagePath = L"C:\\123.bmp";
    Bitmap* pimage = new Bitmap(pImagePath);
    SaveImageToFile(pimage, szFileName, quality);    GdiplusShutdown(gdiplusToken);    remove("c:\\123.bmp");我想删除123.bmp这个文件,提示正在使用,我new的这个Bitmap怎么释放呢? delete pimage;不行,会引起程序崩溃。我把:Bitmap* pimage = new Bitmap(pImagePath);
换成:Bitmap pimage(pImagePath);析构时Image类的析构函数又会引起程序崩溃。inline 
Image::~Image()
{
    DllExports::GdipDisposeImage(nativeImage);
}

解决方案 »

  1.   

    GdiplusShutdown(gdiplusToken); 太早了.
    =======================================================
    FreeLaxy, your backup.
    =======================================================
      

  2.   


    能不能再说的详细点,不熟悉GDI,放到remove()后面也是不行啊。我主要是想把刚用过的BMP图片删除,我发现不关掉程序就不让删。
      

  3.   

    你把delete pimage放在GdiplusShutdown(gdiplusToken)之前。
      

  4.   


    果然,删掉了!
    我以前把delete pimage放到GdiplusShutdown(gdiplusToken)之后了。http://topic.csdn.net/u/20100913/14/7a2f10e4-3cd0-4e0b-9135-74b27a8d648a.html
    这里还有一个此问题的提问,你去回复一下,我结了把分一并送上!
    谢谢!
      

  5.   

    提问:1、楼主的代码里没有delete,不知道4楼在哪看见的delete
    2、我用同样的代码,你把delete pimage放在GdiplusShutdown(gdiplusToken)之前,一样崩溃
    怎么回事啊?
      

  6.   

    ULONG_PTR   m_gdiplusToken; 
    Gdiplus::GdiplusStartupInput   gdiplusStartupInput; 
    Gdiplus::GdiplusStartup(&m_gdiplusToken,   &gdiplusStartupInput,   NULL);
    Bitmap*g_btm = ::new Bitmap(_T("D:\\work\\workTabs_2.bmp"));
    delete g_btm;
    GdiplusShutdown(m_gdiplusToken);