Java Loop through pixels in an image?

后端 未结 2 1368
情书的邮戳
情书的邮戳 2020-12-15 17:13

I\'m trying to find a way to make maps for my 2D java game, and I thought of one Idea in which I would loop through each pixel of an image and depends on what color the pixe

相关标签:
2条回答
  • 2020-12-15 18:01

    I think Pixelgrabber is what you looking for. If you have problems with the code please write a comment. Here is the link to the javadoc: [Pixelgrabber][1] and another short examples: [Get the color of a specific pixel][2], Java program to get the color of pixel

    The following example is from the last link. Thanks to 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

    0 讨论(0)
  • 2020-12-15 18:04

    Note that if you want to loop over all pixels in an image, make sure to make the outer loop over the y-coordinate, like so:

    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);
        }
    }
    

    This will likely make your code much faster, as you'll be accessing the image data in the order it's stored in memory. (As rows of pixels.)

    0 讨论(0)
提交回复
热议问题