C++ GDI+位图保存问题

C++ GDI+位图保存问题,c++,winapi,gdi+,C++,Winapi,Gdi+,这将创建一个长度为零字节的新文件2.jpg。 它不是应该写一个与1.jpg相同的图像文件吗 为什么我有零字节长的文件? 我之所以进行此测试,是因为将其他位图写入文件会导致相同的输出。&Gdiplus::ImageFormatJPEG作为第二个参数发送的值不正确,因此新文件的大小为零字节。请看参考页底部的代码示例,该示例演示了如何正确使用Save。AFAIK,您不能将本例中的图像格式GUID“ImageFormatJPEG”传递给“image::Save”方法。第二个参数应该包含编码器GUID,而

这将创建一个长度为零字节的新文件2.jpg。 它不是应该写一个与1.jpg相同的图像文件吗

为什么我有零字节长的文件?
我之所以进行此测试,是因为将其他位图写入文件会导致相同的输出。

&Gdiplus::ImageFormatJPEG作为第二个参数发送的值不正确,因此新文件的大小为零字节。请看参考页底部的代码示例,该示例演示了如何正确使用Save。

AFAIK,您不能将本例中的图像格式GUID“ImageFormatJPEG”传递给“image::Save”方法。第二个参数应该包含编码器GUID,而不是格式GUID。请参见示例,这里有一种快速保存方法,因为它是一个自定义函数:

Bitmap bff(L"1.jpg");
bff.Save(L"2.jpg", &Gdiplus::ImageFormatJPEG, NULL);
以下是其他格式的ID:

//Save to PNG
CLSID pngClsid;
CLSIDFromString(L"{557CF406-1A04-11D3-9A73-0000F81EF32E}", &pngClsid);
bmp.Save(L"file.png", &pngClsid, NULL);

当我在示例中使用带有GetEncoderClsid的代码时,我得到了一个无效的参数错误。Save方法的返回值为2。回顾你的另一个问题,你调用getEncodercsid,但最终还是通过了&Gdiplus::。。。保存。相反,您应该传递GetEncoderCLSID提供给您的CLSID。另外,JPEG编码器是否需要参数?您正在将NULL作为第三个参数传递,但是对于JPEG编码器,“质量”设置是否是非可选的,如本例中所示?AndreyT:至少对我来说,“保存”在第三个参数为NULL的JPEG上运行良好parameter@phimuemue当前位置哥们,快2年了。我想我是通过逆转GDI+库本身得到的。
bmp: {557cf400-1a04-11d3-9a73-0000f81ef32e}
jpg: {557cf401-1a04-11d3-9a73-0000f81ef32e}
gif: {557cf402-1a04-11d3-9a73-0000f81ef32e}
tif: {557cf405-1a04-11d3-9a73-0000f81ef32e}
png: {557cf406-1a04-11d3-9a73-0000f81ef32e}