首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从RenderTarget复制到主机内存

从RenderTarget复制到主机内存
EN

Stack Overflow用户
提问于 2013-07-23 16:25:45
回答 1查看 1.2K关注 0票数 1

使用Direct2D,我希望能够渲染到系统内存,或者将渲染目标的内容复制到系统内存。

使用Direct2D可以做到这一点吗?或者我必须做一些d3d互操作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-23 16:37:11

可以使用ID2D1Factory::CreateWICBitmapRenderTarget在WIC位图上渲染,然后可以从WIC位图中读取像素。大致是这样的:

代码语言:javascript
复制
ID2D1Factory* d2dfac = 0;
D2D1CreateFactory( D2D1_FACTORY_TYPE_SINGLE_THREADED, &d2dfac );

IWICImagingFactory* wicfac = 0;
CoCreateInstance( CLSID_WICImagingFactory, 0, CLSCTX_INPROC_SERVER,
          IID_IWICImagingFactory, (void**)&wicfac );

IWICBitmap* bmp = 0;
wicfac->CreateBitmap( width, height,
                      GUID_WICPixelFormat32bppPBGRA,
                      WICBitmapCacheOnLoad, &bmp );

ID2D1RenderTarget* render = 0;
d2dfac->CreateWicBitmapRenderTarget(
    bmp,
    D2D1::RenderTargetProperties( D2D1_RENDER_TARGET_TYPE_DEFAULT,
                                  D2D1::PixelFormat( DXGI_FORMAT_B8G8R8A8_UNORM,
                                                     D2D1_ALPHA_MODE_PREMULTIPLIED ),
                                  0.f, 0.f,
                                  D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE ),
    &render );

render->BeginDraw();
// ... Draw on the render target ...
render->EndDraw( 0, 0 );

WICRect rect = { 0, 0, width, height };
IWICBitmapLock* lock = 0;
bmp->Lock( &rect, WICBitmapLockRead, &lock );

BYTE* data = 0;
UINT sz = 0;
lock->GetDataPointer( &sz, &data );
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17805027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档