我正在编程基本图像转换器以将图像转换为BMP。我在最后清理了Image以避免内存泄漏。但是,当我尝试编译它时,会出现此错误:
类型'类Gdiplus ::图像'给予'删除',预期指针
的参数
我检查了多个网站,但是当我使用他们的示例时,它仍然会出现编译器错误。甚至微软的例子也提出了这个错误!我看到一个网站包含删除图片的方法,但我不记得链接或他们删除图片的方式。
我的代码:
#include <windows.h>
#include <gdiplus.h>
using namespace Gdiplus;
int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
{
using namespace Gdiplus; UINT num = 0; // number of image encoders
UINT size = 0; // size of the image encoder array in bytes
ImageCodecInfo* pImageCodecInfo = NULL;
GetImageEncodersSize(&num, &size);
if(size == 0)
return -1; // Failure
pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
if(pImageCodecInfo == NULL)
return -1; // Failure
GetImageEncoders(num, size, pImageCodecInfo);
for(UINT j = 0; j < num; ++j)
{
if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
{
*pClsid = pImageCodecInfo[j].Clsid;
free(pImageCodecInfo);
return j; // Success
}
}
free(pImageCodecInfo);
return 0;
}
int main()
{
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
CLSID bmpClsid;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
Image picture(L"TEST.GIF");
GetEncoderClsid(L"image/bmp", &bmpClsid);
picture.Save(L"Mosaic2.bmp", &bmpClsid, NULL);
delete picture;
GdiplusShutdown(gdiplusToken);
return 0;
}
如果你给我一个有效的答案,我会把你列入该计划的学分。 谢谢!
答案 0 :(得分:3)
嗯,delete
仅适用于指针和你的&#34;图片&#34;是一个对象(除非它以某种方式过载)。此外,由于它是一个本地对象,它应该在main的末尾调用析构函数(它应该释放相关的内存,包括加载的图像)。但是如果需要在GdiplusShutdown(gdiplusToken);
之前释放内存,则可以调整代码以使用指针:
Image *picture = new Image (L"TEST.GIF");
GetEncoderClsid(L"image/bmp", &bmpClsid);
picture->Save(L"Mosaic2.bmp", &bmpClsid, NULL);
delete picture;