Java循环通过图像中的像素?

Java循环通过图像中的像素?,java,image,dictionary,Java,Image,Dictionary,我正试图找到一种为我的2D java游戏制作地图的方法,我想到了一个想法,我将循环遍历图像的每个像素,并取决于要绘制的像素的颜色 e、 g。 是否可以在图像像素之间循环?如果是,怎么做 你能给我提供一些有用的链接或代码片段吗?我想Pixelgrabber就是你想要的。如果你对代码有问题,请写评论。以下是指向javadoc的链接:[Pixelgrabber][1]和另一个简短示例:[获取特定像素的颜色][2] 以下示例来自最后一个链接。感谢roseindia.net import java.aw

我正试图找到一种为我的2D java游戏制作地图的方法,我想到了一个想法,我将循环遍历图像的每个像素,并取决于要绘制的像素的颜色

e、 g。

是否可以在图像像素之间循环?如果是,怎么做


你能给我提供一些有用的链接或代码片段吗?

我想Pixelgrabber就是你想要的。如果你对代码有问题,请写评论。以下是指向javadoc的链接:[Pixelgrabber][1]和另一个简短示例:[获取特定像素的颜色][2]

以下示例来自最后一个链接。感谢roseindia.net

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class ImageTest
{
    public static void main(final String args[])
        throws IOException
    {
        final File file = new File("c:\\example.bmp");
        final BufferedImage image = ImageIO.read(file);

        for (int x = 0; x < image.getWidth(); x++) {
            for (int y = 0; y < image.getHeight(); y++) {
                final int clr = image.getRGB(x, y);
                final int red = (clr & 0x00ff0000) >> 16;
                final int green = (clr & 0x0000ff00) >> 8;
                final int blue = clr & 0x000000ff;

                // Color Red get cordinates
                if (red == 255) {
                    System.out.println(String.format("Coordinate %d %d", x, y));
                } else {
                    System.out.println("Red Color value = " + red);
                    System.out.println("Green Color value = " + green);
                    System.out.println("Blue Color value = " + blue);
                }
            }
        }
    }
}
导入java.awt.image.buffereImage;
导入java.io.File;
导入java.io.IOException;
导入javax.imageio.imageio;
公共类图像测试
{
公共静态void main(最终字符串参数[])
抛出IOException
{
最终文件=新文件(“c:\\example.bmp”);
final buffereImage image=ImageIO.read(文件);
对于(int x=0;x>16;
最终整数绿色=(clr&0x0000ff00)>>8;
最终整数蓝色=clr&0x000000ff;
//颜色为红色,得到堇红色
如果(红色==255){
System.out.println(String.format(“坐标%d%d”,x,y));
}否则{
System.out.println(“红色颜色值=”+红色);
System.out.println(“绿色颜色值=”+绿色);
System.out.println(“蓝色值=”+蓝色);
}
}
}
}
}

[1] :[2]:

请注意,如果要在图像中的所有像素上循环,请确保在y坐标上进行外部循环,如下所示:

for (int y = 0; y < image.getHeight(); y++) {
    for (int x = 0; x < image.getWidth(); x++) {
          int  clr   = image.getRGB(x, y); 
          int  red   = (clr & 0x00ff0000) >> 16;
          int  green = (clr & 0x0000ff00) >> 8;
          int  blue  =  clr & 0x000000ff;
          image.setRGB(x, y, clr);
    }
}
for(int y=0;y>16;
绿色整数=(clr&0x0000ff00)>>8;
int blue=clr&0x000000ff;
setRGB(x,y,clr);
}
}

这可能会使您的代码更快,因为您将按照存储在内存中的顺序访问图像数据。(作为像素行。)

那么这个示例会得到每个像素吗?或者100400处的像素?不,本例只抓取像素100;40所有你需要一个循环通过所有像素。我认为通过image.width和image.height的双循环应该可以解决您的问题broken@Asaph链接是fixed@TobiasSarnow谢谢此答案使用的图像类是什么?BuffereImage IIRC:)