Có không phải là một. Tôi nghĩ rằng họ dự định danh sách codec để được mở rộng và hỗ trợ bổ sung, nhưng không bao giờ có xung quanh với nó. Do họ không thực hiện bất kỳ thay đổi nào đối với GDI + trong một thời gian dài, chúng có thể sẽ không sớm xảy ra. Bạn có thể có thể lấy đi với việc tạo ra danh sách mã hóa cứng của riêng bạn dựa trên một điều tra của Gdiplus :: GetImageEncoders.
Đó là:
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}
Dưới đây là các chức năng tôi thường cắt & dán giữa các dự án để nhận tại CLSID của encoder. Bạn có thể sửa đổi nó thành tra cứu bảng.
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;
}
Đó chính xác là những gì tôi đã cố gắng để làm, nhưng 'GetEncoderClsid' không phải là một phần của GDI + - bạn phải sao chép nó từ tài liệu. –
Ah bạn đúng ... wow giả sử đó là một sự giám sát? – AJG85