我对我的程序中的操作感到茫然(用C语言编写)。我正在处理一个大的数字矩阵(图像)。处理一次发生一行,参考前一行,所以我一次只需要访问两行数字。
最初,我尝试了一个2 x X阵列,但是一旦我保存了第三行的信息,阵列就颠倒了,阵列的第一行中的第三行和图像的第二行图像的第二行。
除了简单地将数组的第二行复制到第一行之外,还有更好的方法来解决这个问题吗?也许它不会那么糟糕,但我想这样做,因为图像的每一行都会很昂贵。我应该在图像上使用两个指针吗?
我很抱歉,如果这是一个很容易被抬起的常见事情,但我无法弄清楚如何开始寻找。如果有人需要澄清,请告诉我。非常感谢你!
我需要访问的数字的图表: http://www.gliffy.com/go/publish/5968966
答案 0 :(得分:1)
我想你正在阅读它时处理图像,或者你正在解压缩它,或者一些这样的图像,因为如果你已经将整个内容以可用的形式存储在内存中,那么你就可以使用它了。
我看到两个相当不错的选择:
(虽然真的,那些归结为几乎相同的东西。)无论哪种方式,你都可以避免不必要的复制。
答案 1 :(得分:0)
我们假设你有:
struct rbg_t bitmap[X][Y];
要获得尺寸为X的窗口2,它是这样的:
struct rgb_t *first_line = bitmap[0], *second_line=bitmap[1];
然后你可以像这样处理这两行:
for(int i=0;i<X;++i)
{
do_work(first_line[i], second_line[i]);
}
要将窗口向下移动一个,您可以执行以下操作:
first_line+=sizeof(struct rgb_t)*X;
second_line+=sizeof(struct rgb_t)*X;
其中X是位图的宽度