反转倒置的位图数据的最佳方法

时间:2010-03-22 07:56:56

标签: c# bitmap

我有一个我调用的方法,它从捕获设备返回位图数据。

它返回一个指向缓冲区数据的指针作为IntPtr,缓冲区长度作为int。

我事先知道这个位图是24bpp及其宽度和高度。

问题是缓冲区包含倒置的位图数据,我需要这些数据的顺序正确(反向)。

我所做的是创建一个for循环并使用CopyMemory,我将这些数据的每一行(步幅)从下到上复制到新分配的内存空间。

有没有办法让它比每次收到新帧时创建更多内存更快?它使应用程序变得有点慢并且因为每个位图非常大而消耗更多内存。

我这样做是因为我使用了另一个分析位图的组件,如果位图是颠倒的,它就无法正常工作。

我正在使用.net,c# 谢谢!

3 个答案:

答案 0 :(得分:2)

如果您有System.Graphics.Bitmap类的实例,则可以使用 RotateFlip(RotateFlipType.RotateNoneFlipY) - 但即使您从指向缓冲区数据的指针创建了Bitmap,也可以使用提到的方法将其翻转方法并在其他位置传递指向位图数据的指针,我认为这比你的方法慢。

但是你不能只用最后一个,(第一个+ 1)和(last-1)等交换第一行,而不分配新内存吗?

答案 1 :(得分:1)

将位图倒置存储在内存中是正常的,然后它将具有负步幅值。

如果您使用的组件无法处理此问题,则除了为其转换图像之外没有任何其他方法。为了减少内存分配,您当然可以分配一次目标位图,并为每个帧重用它。

答案 2 :(得分:0)

为什么不将指针移动到末尾,然后反向处理数据。