Nie ma ani jednego. Myślę, że zamierzali rozszerzyć listę kodeków i obsługiwać wtyczki, ale nigdy się do tego nie zbliżali. Biorąc pod uwagę, że nie wprowadziły one żadnych zmian w GDI + od dłuższego czasu, najprawdopodobniej nie nastąpi to w najbliższym czasie. Prawdopodobnie można uciec z generowaniem własnej, zakodowanej listy w oparciu o wyliczenie Gdiplus :: GetImageEncoders.
Czyli:
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}
Oto funkcja I rutynowo wyciąć & pastę pomiędzy projektami uzyskania na CLSID enkodera. Można go zmodyfikować tak, aby był podglądem tabeli.
HRESULT GetGdiplusEncoderClsid(__in LPCWSTR pwszFormat, __out GUID *pGUID)
{
HRESULT hr = E_FAIL;
UINT nEncoders = 0; // number of image encoders
UINT nSize = 0; // size of the image encoder array in bytes
CAutoVectorPtr<BYTE> spData;
Gdiplus::ImageCodecInfo* pImageCodecInfo = NULL;
Gdiplus::Status status;
bool fFound = false;
// param check
if ((pwszFormat == NULL) || (pwszFormat[0] == 0) || (pGUID == NULL))
{
return E_POINTER;
}
*pGUID = GUID_NULL;
status = Gdiplus::GetImageEncodersSize(&nEncoders, &nSize);
if ((status != Gdiplus::Ok) || (nSize == 0))
{
return E_FAIL;
}
spData.Allocate(nSize);
if (spData == NULL)
{
return E_FAIL;
}
pImageCodecInfo = (Gdiplus::ImageCodecInfo*)(BYTE*)spData;
status = Gdiplus::GetImageEncoders(nEncoders, nSize, pImageCodecInfo);
if (status != Gdiplus::Ok)
{
return E_FAIL;
}
for(UINT j = 0; j < nEncoders; ++j)
{
if(wcscmp(pImageCodecInfo[j].MimeType, pwszFormat) == 0)
{
*pGUID = pImageCodecInfo[j].Clsid;
fFound = true;
break;
}
}
hr = fFound ? S_OK : E_FAIL;
return hr;
}
to jest dokładnie to, co starałem się zrobić, ale 'GetEncoderClsid' nie jest częścią GDI + - trzeba skopiować go z dokumentacją. –
Ach masz rację ... Wow, przypuśćmy, że to było niedopatrzenie? – AJG85