【问题标题】:Win32 BitBlt -- mirror image horizontallyWin32 BitBlt -- 水平镜像
【发布时间】:2010-10-07 21:27:50
【问题描述】:

所以我读到 StretchBlt 可以通过否定 nWidthSrc/Dest 和 nHeightSrc/Dest 参数来水平和/或垂直镜像图像。我希望这个功能没有 StretchBlt 的性能开销。我用 BitBlt 尝试了同样的技术,但没有成功。

有没有什么方法可以用像 BitBlt 这样简单的东西来镜像图像,而不需要 StretchBlt 的矫枉过正?或者如果源和目标大小相同,StretchBlt 不会影响性能吗?

【问题讨论】:

    标签: winapi image gdi mirror


    【解决方案1】:

    BitBlt 只会对有问题的单个像素执行数学运算(或异或等),它不会以任何方式调整图像大小。这正是 StretchBlt 的用途,而且 StretchBlt(与任何其他图形调整大小操作相比)非常快,因为在大多数情况下它可以使用显卡来加速其性能。

    【讨论】:

      【解决方案2】:

      所有的 Win32 功能都可能会被极度优化。

      是什么让您认为 StretchBlt 会在性能上大受打击?

      您是否使用 StretchBlt 分析过您的应用程序?

      您可以自己反转所有位图数据,看看是否可以做得更好。

      这里有一个链接可以帮助你:

      http://www.codeguru.com/cpp/g-m/bitmap/specialeffects/article.php/c1739

      【讨论】:

        【解决方案3】:

        要镜像图像,您只需要以相反的顺序遍历像素。比如,如果你想水平镜像,你只需要执行以下操作:

        1. 将图像画布扩大一倍
        2. 从图像底部开始,从上到下将像素写入镜像区域。
        3. 从左到右执行第 3 步。

        我不知道您使用的是什么语言,但其中大多数允许您使用 GDI 单独操作像素或位。

        【讨论】:

          【解决方案4】:

          除非您知道有关图像的一些额外信息(例如,有一个边框,因此您不必翻转某些像素。

          【讨论】:

            猜你喜欢
            • 2013-10-10
            • 2012-10-18
            • 1970-01-01
            • 1970-01-01
            • 2015-12-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多