所以我读到 StretchBlt 可以通过否定 nWidthSrc/Dest 和 nHeightSrc/Dest 参数来水平和/或垂直镜像图像。我希望这个功能没有 StretchBlt 的性能开销。我用 BitBlt 尝试了同样的技术,但没有奏效。
有没有办法用像 BitBlt 这样简单的东西来镜像图像,而不需要 StretchBlt 的过度杀伤力?或者如果源和目标大小相同,StretchBlt 是否不会影响性能?
BitBlt 只会对有问题的单个像素执行数学运算(或异或等),它不会以任何方式调整图像大小。这正是 StretchBlt 的用途,并且 StretchBlt(与任何其他图形调整大小操作相比)非常快,因为在大多数情况下它可以使用显卡来加速其性能。
所有 Win32 功能都可能会被极度优化。
是什么让您认为 StretchBlt 会在性能上大受打击?
您是否使用 StretchBlt 分析过您的应用程序?
您可以自己反转所有位图数据,看看是否可以做得更好 StretchBlt。
这是一个可能对您有所帮助的链接:
http://www.codeguru.com/cpp/gm/bitmap/specialeffects/article.php/c1739
要镜像图像,您只需要以相反的顺序遍历像素。例如,如果您想水平镜像,您只需要执行以下操作:
我不知道您使用的是什么语言,但它们中的大多数都允许您使用 GDI 单独操作像素或位。
除非您知道有关图像的一些额外信息(例如,有一个边框,因此您不必翻转某些像素,否则您不会比 StretchBlt 更有效率。