Конвертировать 2D массив в изображение в Java?

1

У меня есть 2D-массив (это всего лишь 1 -0), но его тип - int [] [].

Теперь я хочу преобразовать этот массив в изображение (двоичное изображение черно-белое). Но я не мог найти подходящего ответа на мой вопрос. Я искал Google и этот сайт. Может кто-нибудь мне помочь??

Я пробовал этот следующий код, но он

   String path = "C:\\Users\\Cyrus\\Desktop\\test.jpg";
    BufferedImage image = new BufferedImage(b.length, b[0].length, BufferedImage.TYPE_INT_RGB);
    for (int x = 0; x < b.length; x++) { // b is my 2D array
        for (int y = 0; y < b[x].length; y++) {
            image.setRGB(x, y, b[x][y]);
        }
    }

    File ImageFile = new File(path);
    try {
        ImageIO.write(image, "jpg", ImageFile);
    } catch (IOException e) {
        e.printStackTrace();
    }

//после изменения моего кода

String path = "C:\\Users\\Cyrus\\Desktop\\test.jpg";
    BufferedImage image = new BufferedImage(a.length, a[0].length, BufferedImage.TYPE_INT_RGB);
    for (int x = 0; x < a.length; x++) {
        for (int y = 0; y < a[x].length; y++) {
             int value ;
             if(a[x][y]==1)  value = new Color(255,255,255).getRGB();
             else value = new Color(0,0,0).getRGB();
            image.setRGB(x, y, value);

        }
    }

    File ImageFile = new File(path);
    try {
        ImageIO.write(image, "jpg", ImageFile);
    } catch (IOException e) {
        e.printStackTrace();
    }

Но он возвращает неправильное изображение

Теги:
image
bufferedimage

1 ответ

0

Можете ли вы уточнить полученный результат? Выпали ли какие-то исключения? или программа закончилась нормально, но не принесла желаемого результата?

Вы должны заметить, что здесь вы хотите работать с бинарным изображением, тогда есть ли какая-то конкретная причина для выбора JPG? Как я знаю, JPG не является натурным представлением цветового триплетного RGB (например, bmp). jpeg файл является "контейнером" последовательности данных, в котором в его заголовке (EXIF, QT,...) есть много информации, помеченной маркерами. Чтобы иметь дело с пиксельным значением "непосредственно", как в вашем массиве, последовательность данных в файле jpg должна быть "декодирована", а затем, после воспроизведения изображения, данные основного изображения снова будут "закодированы", чтобы быть потоком jpg.

Чтобы играть напрямую с пиксельным значением, я предлагаю вам работать с другими форматами (такими как TGA, png,...)

  • 0
    ах, вернуть черное изображение
  • 0
    Попробуйте распечатать, что является экземпляром BufferedImage, и вы поймете, почему. Это не так просто, что вы можете передать исходную матрицу необработанных данных объекту типа BufferImage, а затем записать изображение, используя этот BufferImage. Если изображение BufferImage является результатом чтения другого изображения, вы можете сохранить его без проблем. Я предлагаю вам попробовать openCV с Java, если вы хотите поиграть с такими пикселями. Синтаксис также очень прост и интуитивно понятен.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню