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