<tfoot id='iRlTV'></tfoot>

      <small id='iRlTV'></small><noframes id='iRlTV'>

        • <bdo id='iRlTV'></bdo><ul id='iRlTV'></ul>
      1. <legend id='iRlTV'><style id='iRlTV'><dir id='iRlTV'><q id='iRlTV'></q></dir></style></legend>

        <i id='iRlTV'><tr id='iRlTV'><dt id='iRlTV'><q id='iRlTV'><span id='iRlTV'><b id='iRlTV'><form id='iRlTV'><ins id='iRlTV'></ins><ul id='iRlTV'></ul><sub id='iRlTV'></sub></form><legend id='iRlTV'></legend><bdo id='iRlTV'><pre id='iRlTV'><center id='iRlTV'></center></pre></bdo></b><th id='iRlTV'></th></span></q></dt></tr></i><div id='iRlTV'><tfoot id='iRlTV'></tfoot><dl id='iRlTV'><fieldset id='iRlTV'></fieldset></dl></div>

        GDI+ 是否具有标准图像编码器 CLSID?

        时间:2023-08-01
          <tfoot id='pquRN'></tfoot>
          <i id='pquRN'><tr id='pquRN'><dt id='pquRN'><q id='pquRN'><span id='pquRN'><b id='pquRN'><form id='pquRN'><ins id='pquRN'></ins><ul id='pquRN'></ul><sub id='pquRN'></sub></form><legend id='pquRN'></legend><bdo id='pquRN'><pre id='pquRN'><center id='pquRN'></center></pre></bdo></b><th id='pquRN'></th></span></q></dt></tr></i><div id='pquRN'><tfoot id='pquRN'></tfoot><dl id='pquRN'><fieldset id='pquRN'></fieldset></dl></div>
            <tbody id='pquRN'></tbody>

          <legend id='pquRN'><style id='pquRN'><dir id='pquRN'><q id='pquRN'></q></dir></style></legend>
          • <bdo id='pquRN'></bdo><ul id='pquRN'></ul>
              • <small id='pquRN'></small><noframes id='pquRN'>

                  本文介绍了GDI+ 是否具有标准图像编码器 CLSID?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

                  问题描述

                  GDI+ Image::Save 方法需要一个 CLSID 参数来指定要使用的编码器.该文档指向一些示例代码获取与特定 MIME 类型关联的编码器,例如 image/jpeg 或 image/png.然而,我对复制半页函数只是为了支持 1 行调试帮助而犹豫不决,我将中间结果保存到磁盘.

                  The GDI+ Image::Save method requires a CLSID parameter to specify the encoder to use. The documentation points to some sample code for getting the encoder associated with a particular MIME type, such as image/jpeg or image/png. However I'm balking at the thought of copying a half-page function just to support a 1-line debugging aid where I save an intermediate result out to disk.

                  不应该有标准编码器的标准 CLSID 列表吗?我在哪里可以找到这样的列表?我一直无法通过搜索 Microsoft 的包含文件找到一个.

                  Shouldn't there be a list of standard CLSIDs for the standard encoders? Where would I find such a list? I haven't been able to find one by searching Microsoft's include files.

                  推荐答案

                  没有.我认为他们希望编解码器列表可扩展并支持插件,但从未考虑过它.鉴于他们在相当长的一段时间内没有对 GDI+ 进行任何更改,因此他们可能不会很快做出更改.您可能可以根据 Gdiplus::GetImageEncoders 的枚举生成自己的硬编码列表.

                  There isn't one. I think they intended the codec list to be extensible and support plugins, but never got around to it. Given that they haven't made any changes to GDI+ in quite some time, they likely won't anytime soon. You could probably get away with generating your own hard coded list based on an enumeration of Gdiplus::GetImageEncoders.

                  即:

                  image/bmp  : {557cf400-1a04-11d3-9a73-0000f81ef32e}
                  image/jpeg : {557cf401-1a04-11d3-9a73-0000f81ef32e} 
                  image/gif  : {557cf402-1a04-11d3-9a73-0000f81ef32e} 
                  image/tiff : {557cf405-1a04-11d3-9a73-0000f81ef32e}
                  image/png  : {557cf406-1a04-11d3-9a73-0000f81ef32e}
                  

                  这是我经常在项目之间剪切和粘贴的函数,用于获取编码器的 CLSID.您可以将其修改为表查找.

                  Here's the function I routinely cut&paste between projects for getting at the CLSID of the encoder. You could modify it to be a table lookup.

                  #include <windows.h>
                  #include <gdiplus.h>
                  #include <string>
                  #include <vector>
                  
                  HRESULT GetGdiplusEncoderClsid(const std::wstring& format, GUID* pGuid)
                  {
                      HRESULT hr = S_OK;
                      UINT  nEncoders = 0;          // number of image encoders
                      UINT  nSize = 0;              // size of the image encoder array in bytes
                      std::vector<BYTE> spData;
                      Gdiplus::ImageCodecInfo* pImageCodecInfo = NULL;
                      Gdiplus::Status status;
                      bool found = false;
                  
                      if (format.empty() || !pGuid)
                      {
                          hr = E_INVALIDARG;
                      }
                  
                      if (SUCCEEDED(hr))
                      {
                          *pGuid = GUID_NULL;
                          status = Gdiplus::GetImageEncodersSize(&nEncoders, &nSize);
                  
                          if ((status != Gdiplus::Ok) || (nSize == 0))
                          {
                              hr = E_FAIL;
                          }
                      }
                  
                      if (SUCCEEDED(hr))
                      {
                  
                          spData.resize(nSize);
                          pImageCodecInfo = (Gdiplus::ImageCodecInfo*)&spData.front();
                          status = Gdiplus::GetImageEncoders(nEncoders, nSize, pImageCodecInfo);
                  
                          if (status != Gdiplus::Ok)
                          {
                              hr = E_FAIL;
                          }
                      }
                  
                      if (SUCCEEDED(hr))
                      {
                          for (UINT j = 0; j < nEncoders && !found; j++)
                          {
                              if (pImageCodecInfo[j].MimeType == format)
                              {
                                  *pGuid = pImageCodecInfo[j].Clsid;
                                  found = true;
                              }
                          }
                  
                          hr = found ? S_OK : E_FAIL;
                      }
                  
                      return hr;
                  }
                  
                  
                  int main()
                  {
                      Gdiplus::GdiplusStartupInput gdiplusStartupInput;
                      ULONG_PTR gdiplusToken;
                      GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
                  
                      GUID guidBmp = {};
                      GUID guidJpeg = {};
                      GUID guidGif = {};
                      GUID guidTiff = {};
                      GUID guidPng = {};
                  
                      GetGdiplusEncoderClsid(L"image/bmp", &guidBmp);
                      GetGdiplusEncoderClsid(L"image/jpeg", &guidJpeg);
                      GetGdiplusEncoderClsid(L"image/gif", &guidGif);
                      GetGdiplusEncoderClsid(L"image/tiff", &guidTiff);
                      GetGdiplusEncoderClsid(L"image/png", &guidPng);
                  
                      return 0;
                  }
                  

                  这篇关于GDI+ 是否具有标准图像编码器 CLSID?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!

                  上一篇:C++ 登录任务计划错误:未完成帐户名称和安全 I 下一篇:C++ 获取程序打开套接字的句柄

                  相关文章

                  最新文章

                  <legend id='8nEpk'><style id='8nEpk'><dir id='8nEpk'><q id='8nEpk'></q></dir></style></legend>

                  1. <i id='8nEpk'><tr id='8nEpk'><dt id='8nEpk'><q id='8nEpk'><span id='8nEpk'><b id='8nEpk'><form id='8nEpk'><ins id='8nEpk'></ins><ul id='8nEpk'></ul><sub id='8nEpk'></sub></form><legend id='8nEpk'></legend><bdo id='8nEpk'><pre id='8nEpk'><center id='8nEpk'></center></pre></bdo></b><th id='8nEpk'></th></span></q></dt></tr></i><div id='8nEpk'><tfoot id='8nEpk'></tfoot><dl id='8nEpk'><fieldset id='8nEpk'></fieldset></dl></div>
                  2. <tfoot id='8nEpk'></tfoot>

                    • <bdo id='8nEpk'></bdo><ul id='8nEpk'></ul>

                      <small id='8nEpk'></small><noframes id='8nEpk'>