我正在努力将原始文件从佳能和尼康等相机转换为WIC格式。我找到了使用文件名创建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);
}
该文件的Canon扩展名为“.cr2”。据我所知,cr2文件至少有2种不同的编解码器。一个来自佳能,一个来自微软。我想确保使用一个特定的编解码器。我怎么能这样做?
由于
答案 0 :(得分: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创建编解码器时指定供应商,但这并不能保证您能获得所需的特定编解码器。