Java Loop через пиксели в изображении? - PullRequest
21 голосов
/ 13 октября 2011

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

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

Возможно ли зациклить пиксели изображения? Если да, то как?

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

Ответы [ 2 ]

24 голосов
/ 13 октября 2011

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

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

8 голосов
/ 13 октября 2011

Я думаю 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...