Я работаю над задачей конвертирования необработанных файлов с камер, таких как Canon и Nikon с WIC, в формат TIFF. Я нашел примеры создания объекта фабрики WIC с использованием имени файла.
//Create a WIC Decoder
////////////////////////////////////////////////////////////////////////////
IWICImagingFactory *piFactory = NULL;
IWICBitmapDecoder *piDecoder = NULL;
//Create the COM imaging factory.
HRESULT hr = CoCreateInstance(
CLSID_WICImagingFactory,
NULL,
CLSCTX_INPROC_SERVER,
IID_IWICImagingFactory,
(LPVOID*)&piFactory);
//Create the decoder.
if (SUCCEEDED(hr))
{
hr = piFactory->CreateDecoderFromFilename(
L"test_raw.cr2",
NULL,
GENERIC_READ,
WICDecodeMetadataCacheOnDemand, //For JPEG lossless decoding/encoding.
&piDecoder);
}
Файл имеет расширение «.cr2» для Canon. Как я знаю, есть как минимум 2 разных кодека для файлов cr2. Один от Canon и один от Microsoft. Я хочу убедиться, что используется один конкретный кодек. Как я могу это сделать?
Спасибо
Чтобы убедиться, что вы получили определенный кодек, вам нужно создать его самостоятельно, например так:
IWICBitmapDecoder *decoder;
IWICStream *stream;
factory->CreateStream(&stream);
stream->InitializeFromFilename(L"filename.png", GENERIC_READ);
CoCreateInstance(CLSID_WICPngDecoder, NULL, CLSCTX_INPROC_SERVER, IID_IWICBitmapDecoder, (void**)&decoder);
decoder->Initialize(stream, WICDecodeMetadataCacheOnDemand);
Чтобы получить информацию об установленных вами кодеках, включая CLSID, используйте IWICImagingFactory :: CreateComponentEnumerator.
Вы также можете указать поставщика при использовании IWICBitmapFactory для создания кодеков, но это не гарантия, что вы получите именно тот, который вам нужен.