【问题标题】:How to perform high quality bitmap scaling in Direct2D?如何在 Direct2D 中执行高质量的位图缩放?
【发布时间】:2013-01-11 05:12:48
【问题描述】:

出于性能原因,我正在尝试将应用程序从 GDI+ 移动到 Direct2D。

以前我在 HALFTONE 模式下使用 StretchBlt(),效果很好,但速度很慢。

现在我使用 RenderTarget->DrawBitmap() 在 Direct2D 中绘图,但它只有两种模式,LINEAR 和 NEAREST_NEIGHBOR,这两种模式都不是很好。 LINEAR 更好,但仍然会产生可怕的伪影。

Direct2D 是否有任何高质量的缩放选项?如果没有,我最好坚持使用 GDI 还是有其他选择?这是一个在带有各种 Win32 控件的窗口中运行的 Windows 应用程序。

【问题讨论】:

    标签: bitmap gdi scaling direct2d


    【解决方案1】:

    Direct2D 1.0 仅支持线性和最近邻插值。 Direct2D 1.1 添加了四种额外的插值算法。这些可通过新的设备上下文渲染目标 (ID2D1DeviceContext) 及其 DrawBitmapDrawImage 方法获得。看看D2D1_INTERPOLATION_MODE 枚举:

    http://msdn.com/library/hh447004.aspx

    【讨论】:

    • 如果我记得,1.1 适用于 Windows 8,在补丁中支持 Windows 7,不支持 Vista?因此,如果我想支持广泛的系统,我就不走运了。
    • Direct2D 1.1 可用于 Windows 7 和 8 以及 Windows Phone 8(非官方)。不幸的是,如果您需要对 Windows Vista 的支持,那么您就只能使用 Direct2D 1.0。
    • 或者,您也可以使用 Windows 图像处理组件来缩放图像。 WIC 与 Direct2D 1.0 和 1.1 一起工作得非常好,并且早在 Windows XP 就得到了支持。 msdn.com/library/ee719810.aspx
    猜你喜欢
    • 2010-09-26
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 2010-09-19
    相关资源
    最近更新 更多