WIC использует определенный кодек

Я работаю над задачей конвертирования необработанных файлов с камер, таких как 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. Я хочу убедиться, что используется один конкретный кодек. Как я могу это сделать?

Спасибо

0

Решение

Чтобы убедиться, что вы получили определенный кодек, вам нужно создать его самостоятельно, например так:

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 для создания кодеков, но это не гарантия, что вы получите именно тот, который вам нужен.

0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector