将RGB缓存数据保存为PNG图片
int GetEncoderClsid(const WCHAR* format, CLSID* pClsid) { 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 -1; // Failure } Gdiplus::Bitmap bitmap(width, height, width * 3, PixelFormat24bppRGB, pBuffer); bitmap.RotateFlip(Gdiplus::Rotate180FlipY);//Y方向旋转180度 CLSID pngClsid; GetEncoderClsid(L"image/png", &pngClsid); bitmap.Save(filename, &pngClsid);
参考链接: