0

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

有没有办法用像 BitBlt 这样简单的东西来镜像图像,而不需要 StretchBlt 的过度杀伤力?或者如果源和目标大小相同,StretchBlt 是否不会影响性能?

4

4 回答 4

2

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

于 2009-02-16T15:11:02.347 回答
1

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

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

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

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

这是一个可能对您有所帮助的链接:

http://www.codeguru.com/cpp/gm/bitmap/specialeffects/article.php/c1739

于 2009-02-16T14:32:58.447 回答
0

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

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

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

于 2009-02-16T14:25:04.127 回答
0

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

于 2009-02-16T14:45:28.510 回答