Mengambil Pengidentifikasi Kelas untuk Encoder

Fungsi GetEncoderClsid dalam contoh berikut menerima jenis MIME dari encoder dan mengembalikan pengidentifikasi kelas (CLSID) dari encoder tersebut. Jenis MIME encoder yang disertakan dalam Windows GDI+ adalah sebagai berikut:

  • gambar/bmp
  • gambar/jpeg
  • gambar/gif
  • gambar/tiff
  • gambar/png

Fungsi ini memanggil GetImageEncoders untuk mendapatkan array objek ImageCodecInfo . Jika salah satu objek ImageCodecInfo dalam array tersebut mewakili encoder yang diminta, fungsi mengembalikan indeks objek ImageCodecInfo dan menyalin CLSID ke dalam variabel yang ditunjukkan oleh pClsid. Jika fungsi gagal, fungsi akan mengembalikan –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
}

Aplikasi konsol berikut memanggil fungsi GetEncoderClsid untuk menentukan CLSID encoder 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;
}

Saat menjalankan aplikasi konsol sebelumnya, Anda mendapatkan output yang mirip dengan yang berikut ini:

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}.