Здравствуйте.
У меня есть черно-белое изображение в BufferedImage.
Как мне его перевести в картинку из 0 и 1?
Число - это как пиксель, например, 0 - это белый, а 1 - это черный. Как это можно реализовать?
Например:
0 0 0 0 0
0 0 1 0 0
0 1 1 1 0
1 1 1 1 1
0 0 1 0 0
0 0 1 0 0
0 0 1 0 0
0 0 0 0 0
Нарисовал стрелочку :D
Вы должны обойти картинку как массив пикселей и каждому пикселю сопосотавить 1 - это черный пиксель, 0 - белый.
BufferedImage image = ImageIO.read(new File("some file"));
int[][] array = new int[image.getHeight()][image.getWidth()];
for (int i = 0; i < image.getHeight(); i++) {
for (int j = 0; j < image.getWidth(); j++) {
int rgb = image.getRGB(i, j);
Color color = new Color((rgb >> 16) & 0xFF, (rgb >> 8) & 0xFF, rgb & 0xFF);
//color - это цвет пикселя.
array[i][j] = color.equals(Color.BLACK) ? 1 : 0;
}
}
Альтернатива ответу Andrew Bystrov
BufferedImage img = ImageIO.read(Test.class.getResourceAsStream("image.png"));
byte[] data = ((DataBufferByte) img.getRaster().getDataBuffer()).getData();
int[][] imgData = new int[img.getHeight()][img.getWidth()];
int counter = 0;
for (int i = 0; i < imgData.length; i++) {
for (int j = 0; j <imgData[i].length ; j++) {
imgData[i][j] = data[counter] == 0 ? 0 : 1;
counter++;
}
}
Метод для принта в консоль.
void print(int imgData[][]){
for (int i = 0; i < imgData.length; i++) {
StringBuilder line = new StringBuilder();
for (int j = 0; j <imgData[i].length ; j++) {
line.append(imgData[i][j]).append(" ");
}
System.out.println(line.toString());
}
}
Источник:
Результат:
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости