Win32 BitBlt - 水平镜像

时间:2009-02-16 14:13:04

标签: winapi image gdi mirror

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

有没有办法用像BitBlt这样简单的镜像来镜像图像,而没有过多的StretchBlt?或者,如果源和目标大小相同,StretchBlt是否会影响性能?

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

所有Win32功能都可能会进行极为优化。

是什么让你觉得StretchBlt会受到很大影响?

您是否使用StretchBlt描述了您的应用程序?

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

这是一个可能会帮助您的链接:

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

答案 2 :(得分:0)

要镜像图像,只需按相反顺序循环显示像素即可。例如,如果你想水平镜像,你只需要执行以下操作:

  1. 将图片画布展开为尺寸加倍
  2. 从图像的底部开始,然后从上到下将像素写入镜像区域。
  3. 从左到右执行第3步。
  4. 我不知道您使用的是哪种语言,但大多数语言允许您使用GDI单独操作像素或位。

答案 3 :(得分:0)

除非你知道一些关于图像的额外信息(例如,有一个边框,所以你不必翻转某些像素。),你不会比StretchBlt更有效率。

相关问题