Как сделать из BufferedImage картинку 0 и 1

231
07 июля 2017, 04:36

Здравствуйте. У меня есть черно-белое изображение в 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

Answer 1

Вы должны обойти картинку как массив пикселей и каждому пикселю сопосотавить 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;
    }
}
Answer 2

Альтернатива ответу 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());
    }
}

Источник:

Результат:

READ ALSO
Не отображает изображение в браузере

Не отображает изображение в браузере

Вроде написано все правильно, делала по урокам в интернете

265
Как отследить изменение размера div&#39;ов?

Как отследить изменение размера div'ов?

У меня есть HTML код, в нём есть div, который имеет ширину в 100%Он содержит несколько элементов

323