【DirectComposition】位图对象

        微软DirectComposition是一个位图合成引擎。它使应用开发者可以组合多张位图,通过多种方式来操作它们,从而在应用的UI中实现有趣的视觉效果和动画。本主题介绍 DirectComposition 支持的位图内容类型。

一、位图内容(Bitmap Content)

        应用程序通过创建可视对象(visual object),然后设置这些对象的 Content 属性,为 DirectComposition 提供要进行合成和动画处理的位图内容。DirectComposition 不提供任何光栅化服务。应用程序必须使用其他一些基于软件或硬件加速的光栅化库(如 Direct2D 或 Direct3D)来填充要合成的位图。合成后,DirectComposition 将合成的位图内容传递到桌面窗口管理器 (DWM) 以呈现到屏幕。

       DirectComposition支持以下种类的位图:显存位图窗口位图

二、显存位图(Video Memory Bitmap)

        使用 Microsoft DirectX 方法(包括 DX-GDI 互操作模型)在硬件中光栅化显存位图。它由对调用应用程序和 DirectComposition 可见的跨进程共享表面(surface)提供支持。显存位图不受撕裂的影响,因为应用程序只能从DirectComposition纹理的表面读取。

三、视频内容(Video Content)

        应用程序可以使用DirectComposition来合成视频帧,这些视频帧使用绑定到DirectComposition表面的DirectX无窗口交换链。从概念上讲,DirectComposition将视频内容视为位图序列。DirectComposition不提供呈现视频帧的方法。

        DirectComposition支持DirectX无窗口交换链,即不绑定到特定窗口的交换链,并允许两个不同的应用程序跨进程边界共享无窗口交换链。共享无窗口交换链支持在一个进程中创建交换链并在另一个进程中与DirectComposition一起使用的视频场景。无窗口交换链是使用如下方法创建的:

HRESULT IDXGIFactory2::CreateSwapChainForComposition(
  [in]           IUnknown                    *pDevice,
  [in]           const DXGI_SWAP_CHAIN_DESC1 *pDesc,
  [in, optional] IDXGIOutput                 *pRestrictToOutput,
  [out]          IDXGISwapChain1             **ppSwapChain
);

        有关DirectX交换链的更多信息,请参见DXGI概述。

四、窗口位图(Window Bitmap)

        “窗口位图”不是一个真正的位图,而是一个占位符,DirectComposition会实时用分层的顶层或子窗口的光栅化结果来替换它。窗口位图类似于DWM缩略图,除了缩略图可以包含来自许多窗口的贡献,例如拥有的非子窗口,而DirectComposition窗口位图始终只是一个窗口及其子窗口的表示。

        因为DirectComposition可以访问所有窗口和所有可视树的重定向表面,所以它可以在多个可视树中重用一个窗口的内容。窗口必须是分层的(layered),因为非分层窗口没有专用的重定向表面,因此,DirectComposition并不总是可以使用其光栅化结果。

        要使用窗口位图,应用程序需要将visual与窗口句柄(HWND)相关联。之后,每当窗口的内容发生变化时,DirectComposition都会重新组合视觉效果,包括当内容由于与窗口相关的视觉树的变化而发生变化时。换句话说,就像DWM缩略图一样,DirectComposition窗口位图是“实时的”。

五、将位图内容与Visual相关联

        对于所有三种类型的位图,应用程序可以将相同的位图与多个Visual相关联,这意味着单个内存分配可以用于多次显示相同的内容。

六、Alpha通道

        所有位图都有32位每像素(BPP)格式,其中包括8位每像素透明度。但是,应用程序可以指定DirectComposition应该如何使用alpha通道。特别的,DirectComposition可以尊重alpha通道,也可以完全忽略alpha通道,在这种情况下,位图被认为是完全不透明的。

        有一个额外的alpha模式可以忽略alpha通道,但将红、绿和蓝值视为每个通道的alpha值,而不是将这些通道正常解释为颜色强度。这种模式对于ClearType渲染是有用的,它需要亚像素覆盖信息。要使用每通道alpha模式,应用程序必须首先使用Direct2D和DirectWrite将亚像素覆盖数据写入位图。接下来,应用程序必须设置正确的alpha模式,并在将位图与visual相关联时指定文本颜色。DirectComposition将文本颜色与覆盖层混合,从而在背景下产生ClearType混合。

        在ClearType算法不适用的情况下,比如如果位图不是像素对齐和轴对齐的,或者如果它需要被绘制到一个中间表面,DirectComposition可以使用位图中的亚像素覆盖数据来生成灰度栅格化,自动地,且不需要额外的成本。

        更多信息请参见IDCompositionDevice::CreateSurface或IDCompositionDevice::CreateVirtualSurface函数的alphaMode参数说明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值