Java Цикл через пиксели в изображении?

Я пытаюсь найти способ сделать карты для своей 2D-java-игры, и я подумал об одной идее, в которой я прокручивал каждый пиксель изображения и в зависимости от того, какой цвет был бы пикселем, который был бы плитку рисовать.

например. enter image description here

Можно ли прокручивать пиксели изображений? Если да, то как?

Не могли бы вы предоставить мне полезные ссылки или фрагменты кода?

Ответы

Ответ 1

Обратите внимание, что если вы хотите перебрать все пиксели в изображении, обязательно сделайте внешний цикл над 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);
    }
}

Это, скорее всего, сделает ваш код намного быстрее, поскольку вы будете получать доступ к данным изображения в том порядке, в котором он хранится в памяти. (Как строки пикселей.)

Ответ 2

Я думаю, что Pixelgrabber это то, что вы ищете. Если у вас есть проблемы с кодом, пожалуйста, напишите комментарий. Вот ссылка на javadoc: [Pixelgrabber] [1] и другие короткие примеры: [Получить цвет определенного пикселя] [2], Java-программа для получения цвета пикселя

Следующий пример взят из последней ссылки. Благодаря 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