将RGB缓存数据保存为PNG图片

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

 

 

参考链接:

https://docs.microsoft.com/en-us/windows/win32/gdiplus/-gdiplus-retrieving-the-class-identifier-for-an-encoder-use

http://www.xhuojia.com/php/3537108452.html

posted @ 2020-03-05 14:12  余生以学  阅读(2234)  评论(0编辑  收藏  举报