使用D2D出现的错误

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 方法来设置抗锯齿模式。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值