c – 如何将Direct2D渲染目标清除为完全透明

前端之家收集整理的这篇文章主要介绍了c – 如何将Direct2D渲染目标清除为完全透明前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在一个看不见的HWND上绘制半透明的矩形.但是,使用ID2D1HwndRenderTarget :: Clear清除窗口会使整个窗口变黑,所以当我在顶部绘制矩形时,它们看起来是半黑色的.

如果我不清除()并且不绘制,那么窗口是不可见的,因为它应该是. Clear()是罪魁祸首;但是,如果我不使用它,那么绘画就会非常糟糕.

这是我在WindowProc中使用的代码

  1. case WM_PAINT:
  2. // Begin drawing
  3. pRenderTarget->BeginDraw();
  4. pRenderTarget->SetTransform(D2D1::Matrix3x2F::Identity());
  5.  
  6. // Clear the window
  7. pRenderTarget->Clear();
  8.  
  9. // Paint the panel and its children
  10. D2DSurface()->StartPainting();
  11. {
  12. D2DSurface()->PaintTraverse(panel);
  13. }
  14. D2DSurface()->FinishPainting();
  15.  
  16. // Finish drawing
  17. HRESULT hr = plat->pRenderTarget->EndDraw();

提前致谢!

解决方法

在创建RenderTarget时,您必须告诉D2D您要以像素格式使用alpha(在预乘模式下):
  1. HRESULT hr = mD2DFactory->CreateHwndRenderTarget(
  2. D2D1::RenderTargetProperties( D2D1_RENDER_TARGET_TYPE_DEFAULT,D2D1::PixelFormat( DXGI_FORMAT_UNKNOWN,D2D1_ALPHA_MODE_PREMULTIPLIED ) ),D2D1::HwndRenderTargetProperties( mWindow,size ),&mRenderTarget );

在此之后,使用alpha值为零调用Clear()可以正常工作.

猜你在找的C&C++相关文章