Nic*_*ick 5 c++ directx transparency direct2d pixelformat
我需要使用 Direct2D 创建一个透明位图,并使用我的设备上下文在其上绘制。
ID2D1DeviceContext1* d2dContext = ...
ID2D1Bitmap* pBitmap;
d2dContext->CreateBitmap(
bitmapSize,
nullptr,
0,
D2D1::BitmapProperties1(
D2D1_BITMAP_OPTIONS_TARGET,
D2D1::PixelFormat(DXGI_FORMAT_B8G8R8A8_UNORM, D2D1_ALPHA_MODE_PREMULTIPLIED),
dpiX, dpiY),
&pBitmap);
d2dContext->BeginDraw();
d2dContext->SetTarget(pBitmap);
d2dContext->Clear(D2D1::ColorF(0, 0));
d2dContext->DrawLine(...);
hr = d2dContext->EndDraw();
Run Code Online (Sandbox Code Playgroud)
不幸的是我无法创建任何透明位图。我尝试了几种像素格式组合,包括D2D1_ALPHA_MODE_STRAIGHT,但没有成功。
有什么解决办法吗?
好消息尼克:您正在创建透明位图,但是您没有看到预期结果的原因与窗口创建有关。Kenny Kerr早在 2009 年就在这里演示了使用 Direct2D创建正确的分层窗口。
从那时起,Windows 渲染方面发生了很大变化,Win8 和 Win10 使用合成引擎,并允许开发人员访问 DirectComposition API。因此,Kenny Kerr 在 2014 年提供了一篇关于该主题的更新文章。
我最近的项目需要Win7支持,所以我个人坚持使用纯Direct2D。
编辑: 当然还要确保正确创建渲染目标。希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
3520 次 |
| 最近记录: |