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

时间:2011-10-13 05:41:00

标签: java image dictionary

我正在试图找到一种为我的2D java游戏制作地图的方法,我想到了一个想法,我将循环遍历图像的每个像素,并取决于它的像素是什么颜色瓷砖画。

e.g。 enter image description here

是否可以循环使用图像像素?如果是,怎么样?

您能否提供一些有用的链接或代码段?

2 个答案:

答案 0 :(得分:23)

请注意,如果要循环覆盖图像中的所有像素,请确保将外部循环覆盖在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);
    }
}

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

答案 1 :(得分:8)

我认为Pixelgrabber就是你要找的。如果您对代码有疑问,请写评论。以下是javadoc的链接:[Pixelgrabber] [1]和另一个简短示例:[获取特定像素的颜色] [2],Java program to get the color of pixel

以下示例来自最后一个链接。感谢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);
                }
            }
        }
    }
}

[1]:https://docs.oracle.com/javase/7/docs/api/java/awt/image/PixelGrabber.html [2]:http://www.rgagnon.com/javadetails/java-0257.html