【问题标题】:WIC use specific codecWIC 使用特定的编解码器
【发布时间】:2014-09-18 20:38:50
【问题描述】:

我正在致力于将带有 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);
}

该文件的 Canon 扩展名为“.cr2”。据我所知,cr2 文件至少有 2 种不同的编解码器。一个来自佳能,一个来自微软。我想确保使用一种特定的编解码器。我该怎么做?

谢谢

【问题讨论】:

    标签: c++ camera codec wic


    【解决方案1】:

    为确保您获得特定的编解码器,您需要自己创建它,如下所示:

    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 创建编解码器时指定供应商,但这并不能保证您会得到您想要的特定供应商。

    【讨论】:

      猜你喜欢
      • 2021-12-23
      • 1970-01-01
      • 2018-08-05
      • 2020-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-07
      • 2021-01-25
      相关资源
      最近更新 更多