Необходимо получить класс Mat, провести с ним манипуляции и сохранить в byte[], с последующим восстановлением byte[] в Mat.
Написал простейший пример:
public class App {
public static void main(String[] args) {
try (InputStream inputStream = App.class.getResourceAsStream("/little-image.png")) {
byte[] bytes = new byte[inputStream.available()];
inputStream.read(bytes);
//Первое получение Mat
Mat mat = Imgcodecs.imdecode(new MatOfByte(bytes), Imgcodecs.IMREAD_UNCHANGED);
System.out.println(mat);
if (mat.empty()) {
System.out.println("empty");
} else {
System.out.println("TYPE: " + CvType.typeToString(mat.type())); //Не пусто
}
//Копируем
byte[] testImg = new byte[mat.cols() * mat.rows() * mat.channels()];
int count = mat.get(0, 0, testImg);
System.out.println("count: " + count);
System.out.println("testImg.length: " + testImg.length);
//Получаем из скопированного
Mat mat1 = Imgcodecs.imdecode(new MatOfByte(testImg), Imgcodecs.IMREAD_ANYDEPTH);
System.out.println(mat1);
if (mat1.empty()) {
System.out.println("empty"); //!!!!!!!!!!!!ПУСТО!
} else {
System.out.println("TYPE: " + CvType.typeToString(mat1.type()));
}
mat.release();
mat1.release();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Восстановление Mat из byte[] возвращает пустой Mat.
Так у Вас testImg
пустой. Вы лишь инициализируете массив байт заданной длины, но ничем его не заполняете. По-умолчанию весь массив при инициализации заполняется нулями.
Решение:
MatOfByte matOfByte = new MatOfByte();
Imgcodecs.imencode(".png", mat, matOfByte);
byte[] bytes1 = matOfByte.toArray();
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Начал получить ошибку на Mac при попытке записать pdf файл в папку tempВернее, приложение должно записывать туда файл, но не записывает (исключения...
Если я в 15 строке заменяю на простое, обыкновенное число (не digitnextInt()), то все работает по плану!
У меня есть старый контроллер, который обслуживает все запросы по адресу /get, то есть на уровне класса стоит аннотация @RequestMapping(value = "get")
Имеется контроллер, который выводит все департаментыВ html с помощью th:each Я вывожу их все