У меня есть 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();
}
Но он возвращает неправильное изображение
Можете ли вы уточнить полученный результат? Выпали ли какие-то исключения? или программа закончилась нормально, но не принесла желаемого результата?
Вы должны заметить, что здесь вы хотите работать с бинарным изображением, тогда есть ли какая-то конкретная причина для выбора JPG? Как я знаю, JPG не является натурным представлением цветового триплетного RGB (например, bmp). jpeg файл является "контейнером" последовательности данных, в котором в его заголовке (EXIF, QT,...) есть много информации, помеченной маркерами. Чтобы иметь дело с пиксельным значением "непосредственно", как в вашем массиве, последовательность данных в файле jpg должна быть "декодирована", а затем, после воспроизведения изображения, данные основного изображения снова будут "закодированы", чтобы быть потоком jpg.
Чтобы играть напрямую с пиксельным значением, я предлагаю вам работать с другими форматами (такими как TGA, png,...)