题
所以我读到,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
要镜像图像,您只需以相反的顺序循环遍历像素即可。比如如果你想水平镜像你只需要执行以下操作:
- 将图像画布扩大一倍
- 从图像的底部开始,从上到下将像素写入镜像区域。
- 从左到右执行步骤3。
我不知道您使用的是什么语言,但大多数语言都允许您使用 GDI 单独操作像素或位。
没有办法,你将要更高效,StretchBlt,除非你知道有关图像一些额外的信息(例如,有一个边界,所以你不必翻转一定的像素。
不隶属于 StackOverflow