什么是从线扫描相机显示线图像的最快算法或方法

时间:2013-02-04 23:21:15

标签: c++ algorithm

我们有一台线扫描相机,每秒可产生300行图像。我们希望以FIFO的方式在图像视图上显示线条,以便视图的最后一行显示最近的线条图像,同时移动上面的前一行以进行线条更新。

如果我可以像以前一样使用C访问视频内存,我只会这样做

memcpy(videoMem, videoMem+lineWidth*pixelSize, pixelSize*lineWidth*(nLines-1));
memcpy(videoMem+pixelSize*lineWidth*(nLines-1),newLine,lineWidth*pixelSize);

但我不知道即使使用直接视频内存访问,这是否是我能做的最好的事情。

现在我明白直接访问视频内存是不可能也不可取的。在那种情况下,最好的方法是什么?专家的任何意见将不胜感激。

Windows 7中的桌面PC应用程序。

更新

正如我所料,似乎我必须处理一种循环缓冲区。在我的情况下,棘手的部分是逐行扫描,同时逐屏阅读。因此end指针到达缓冲区的物理端,需要额外的内存复制才能将屏幕内存传递到视频中。我想Bip缓冲区可以解决这个问题。还有其他想法吗?

1 个答案:

答案 0 :(得分:2)

你不能记忆重叠的内存,这是memmove的目的。但是,只要副本以正确的顺序发生,您就可以使用memcpy。在您的平台上试一试,看它是否有效。

主要的实现问题是如果有两个单独的写入会导致闪烁。如果是这种情况,您必须先将新图像写入缓冲区,然后将整个缓冲区一次性写入视频内存。

一般来说,你不读取视频内存。要显示的数据应位于其自己的内存区域中。总结一下,你有3个记忆区域:

  1. 要显示的数据
  2. 显示缓冲区
  3. 视频内存(或其等价物)
  4. 标准过程是在一步中写入1-> 2,然后是2-> 3。但是,如果没有闪烁,则可以直接使用1-> 3而不使用缓冲区。除此之外,没有超出你所写的魔术算法