有关迭代图像中每个像素的简单问题

时间:2011-11-10 15:23:03

标签: java iteration pixels

好吧,这似乎真的很愚蠢,但请耐心等待。一年前,我做了一个小程序,对图像进行各种操作,现在我有点生疏,不得不做一些模糊的相似的事情。我正在查看旧的应用程序,以帮助我开始,但有一个非常简单的事情,我的头不想理解刚才的逻辑。基本上我循环遍历图像中的每个像素以便对该位置执行某些操作,现在究竟无关紧要。这是基本的想法:

for (int x = 0; x < inputImage.getWidth(); x++) {
    for(int y = 0; y < inputImage.getHeight(); y++) {
        *code in here*
    }
}

现在我得不到的是这个。当然,嵌套for循环的逻辑意味着在每个循环之后,x和y都会递增。所以在第一遍中,x = 0,y = 0.第二遍,x = 1,y = 1,依此类推。这意味着你只选择从图像左上角到右下角的对角线像素,错过了大量的像素,例如位于x = 0,y = 1的像素。我知道这很简单,肯定会使感觉但我现在还没有得到逻辑!非常感谢。

2 个答案:

答案 0 :(得分:1)

不,那不是嵌套循环所做的。 y循环完全位于x循环的主体内(这意味着嵌套),因此整个 y循环在每次迭代时运行x循环。

x = 0
   y = 0, y = 1, y = 2, ...
x = 1
   y = 0, y = 1, y = 2, ...

如果你想要的话,你想到的行为,只能迭代对角线元素,可以这样实现:

for (int x = 0, int y = 0;
           x < inputImage.getWidth && y < inputImage.getHeight;
           x++, y++) {
     // stuff
}

注意xy在同一循环中的递增方式;没有嵌套的“subloop”。 (免责声明:我有一段时间没有完成Java,我可能有点搞砸了语法)

答案 1 :(得分:1)

没有。 xy实际上并未同时增加。

对于y0的每inputImage.height-1

x0转到inputImage.width-1。这意味着,您在移动到图像上的另一列之前完全遍历第一列,依此类推。