Partager via


Récupération de l’identificateur de classe pour un encodeur

La fonction GetEncoderClsid dans l’exemple suivant reçoit le type MIME d’un encodeur et retourne l’identificateur de classe (CLSID) de cet encodeur. Les types MIME des encodeurs intégrés à Windows GDI+ sont les suivants :

  • image/bmp
  • image/jpeg
  • image/gif
  • image/tiff
  • image/png

La fonction appelle GetImageEncoders pour obtenir un tableau d’objets ImageCodecInfo . Si l’un des objets ImageCodecInfo de ce tableau représente l’encodeur demandé, la fonction retourne l’index de l’objet ImageCodecInfo et copie le CLSID dans la variable pointée par pClsid. Si la fonction échoue, elle retourne –1.

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
}

L’application console suivante appelle la fonction GetEncoderClsid pour déterminer le CLSID de l’encodeur PNG :

#include <windows.h>
#include <gdiplus.h>
#include <stdio.h>
using namespace Gdiplus;

#include "GdiplusHelperFunctions.h"

INT main()
{
   // Initialize GDI+.
   GdiplusStartupInput gdiplusStartupInput;
   ULONG_PTR gdiplusToken;
   GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);

   CLSID  encoderClsid;
   INT    result;
   WCHAR  strGuid[39];

   result = GetEncoderClsid(L"image/png", &encoderClsid);

   if(result < 0)
   {
      printf("The PNG encoder is not installed.\n");
   }
   else
   {
      StringFromGUID2(encoderClsid, strGuid, 39);
      printf("An ImageCodecInfo object representing the PNG encoder\n");
      printf("was found at position %d in the array.\n", result);
      wprintf(L"The CLSID of the PNG encoder is %s.\n", strGuid);
   }

   GdiplusShutdown(gdiplusToken);
   return 0;
}

Lorsque vous exécutez l’application console précédente, vous obtenez une sortie similaire à ce qui suit :

An ImageCodecInfo object representing the PNG encoder
was found at position 4 in the array.
The CLSID of the PNG encoder is {557CF406-1A04-11D3-9A73-0000F81EF32E}.