1.VS版本问题
使用VS2013时,WIC组件出现IWICImagingFactory初始化失败,因为在新的版本中CLSID_WICImagingFactory会被定义为CLSID_WICImagingFactory2
// Create a WIC factory.
CoCreateInstance(
CLSID_WICImagingFactory,//这里更改为CLSID_WICImagingFactory1
NULL,
CLSCTX_INPROC_SERVER,
IID_IWICImagingFactory,
reinterpret_cast<void **>(&m_pWICImagingFactory)
);
//在这段代码出现问题,m_pWICImagingFactory初始化失败,总是NULL
2.WIC组件创建解码器问题
D2D下加载图片必须使用WIC组件,作者参考微软的D2D教程使用LoadBitmapFromFile函数时,当函数内的CreateDecoderFromFilename函数,
WICDecodeOptions参数为WICDecodeMetadataCacheOnLoad时失败,切换WICDecodeMetadataCacheOnDemand正常.
//Create a WICDecoder
hr = m_pWICImagingFactory->CreateDecoderFromFilename(
uri,
NULL,
GENERIC_READ,
WICDecodeMetadataCacheOnLoad,
&pDecoder
);
//这段代码出现问题,pDecoder为NULL
3.蒙板问题
使用FillOpecityMask函数,要特别注意。FillOpecityMask函数不像DGI下BitBlt函数提供颜色做蒙板计算,而是图片和画刷的Alpha值(透明度)相乘。即用做蒙板的图片背景需要透明的。
m_pHwndRenderTarget->SetAntialiasMode(D2D1_ANTIALIAS_MODE_ALIASED);
m_pHwndRenderTarget->FillOpacityMask(
m_pHuman,
m_pHumanMaskBursh,
D2D1_OPACITY_MASK_CONTENT_GRAPHICS,
//RECTF
rcbrushRect,
D2D1::RectF(0,0,200 ,200)
);
//为使此方法正常工作,呈现器目标必须使用 D2D1_ANTIALIAS_MODE_ALIASED 抗锯齿模式。可通过调用ID2D1RenderTarget::SetAntialiasMode 方法来设置抗锯齿模式。