WIC enum#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <ole2.h>
#include <wincodec.h>
#include <stdio.h>
#include <wchar.h>
#pragma comment(lib, "ole32")
//#pragma comment(lib, "windowscodecs.lib")
const GUID CLSID_WICImagingFactory = {0xcacaf262,0x9370,0x4615,{0xa1,0x3b,0x9f,0x55,0x39,0xda,0x4c,0xa}};
//const GUID CLSID_WICImagingFactory1 = {0xcacaf262,0x9370,0x4615,{0xa1,0x3b,0x9f,0x55,0x39,0xda,0x4c,0xa}};
//const GUID CLSID_WICImagingFactory2 = {0x317d06e8,0x5f24,0x433d,0xbd,0xf7,0x79,0xce,0x68,0xd8,0xab,0xc2};
const IID IID_IWICImagingFactory = {0xEC5EC8A9,0xC395,0x4314,{0x9C,0x77,0x54,0xD7,0xA9,0x35,0xFF,0x70}};
const IID IID_IWICBitmapCodecInfo = {0xE87A44C4,0xB76E,0x4C47,{0x8B,0x09,0x29,0x8E,0xB1,0x2A,0x27,0x14}};
// https://codexpert.ro/blog/2012/12/21/how-to-enumerate-wic-codecs/
// https://learn.microsoft.com/en-us/archive/msdn-magazine/2008/june/windows-with-c-decoding-windows-vista-icons-with-wic
int __cdecl main(void)
{
HRESULT hr;
IWICImagingFactory* pIWICFactory = 0;
//OleInitialize(NULL);
CoInitializeEx( NULL, COINIT_MULTITHREADED);
hr = CoCreateInstance(&CLSID_WICImagingFactory, NULL, CLSCTX_INPROC_SERVER, &IID_IWICImagingFactory, (void **)(&pIWICFactory));
if (pIWICFactory) {
IEnumUnknown* pEnum;
DWORD dwOptions = WICComponentEnumerateDefault;
hr = pIWICFactory->lpVtbl->CreateComponentEnumerator(pIWICFactory, WICDecoder, dwOptions, &pEnum);
if(SUCCEEDED(hr))
{
UINT cbBuffer = 256;
ULONG cbActual = 0;
IUnknown* pElement = NULL;
WCHAR wszBuffer[256];
//while(S_OK == pEnum->lpVtbl->Next(pEnum, 1, &pElement, &cbActual))
while(S_OK == pEnum->lpVtbl->Next(pEnum, 1, &pElement, 0))
{
UINT cbActual2 = 0;
IWICBitmapCodecInfo* pCodecInfo;
hr = pElement->lpVtbl->QueryInterface(pElement, &IID_IWICBitmapCodecInfo, (void**)&pCodecInfo);
CLSID clsid;
hr = pCodecInfo->lpVtbl->GetCLSID(pCodecInfo, &clsid);
//hr = pCodecInfo->lpVtbl->GetFriendlyName(pCodecInfo, 0, NULL, &cbActual2);
hr = pCodecInfo->lpVtbl->GetFriendlyName(pCodecInfo, cbBuffer, wszBuffer, &cbActual2);
//wprintf(L"%Xh %u %ls\n", hr, cbActual2, wszBuffer);
wprintf(L"%ls\n", wszBuffer);
pElement = NULL;
}
}
pIWICFactory->lpVtbl->Release(pIWICFactory);
}
OleUninitialize();
return 0;
}
BMP Decoder
GIF Decoder
ICO Decoder
JPEG Decoder
PNG Decoder
TIFF Decoder
WMPhoto Decoder
BMP Decoder
GIF Decoder
ICO Decoder
JPEG Decoder
PNG Decoder
TIFF Decoder
WMPhoto Decoder
WebP Decoder
EDIT: zip with smaller files using msvcrt.dll