Когда вы говорите, что у вас есть изображение в столбце bytea, как именно оно сохраняется? Хранит ли это байты содержимого файла JPEG, или массив значений пикселей RGB, или что-то еще? «Bytea» - это просто двоичная строка, которая может хранить данные практически в любом формате.
Я предполагаю, что это содержимое JPEG. В этом случае вы можете извлечь содержимое jpeg через Java, сохранить его во временный файл и вызвать imread () для временного файла.
Эти [-128,127] значения являются значениями байтов со знаком Java. Даже без Database Toolbox вы можете вызывать обычный JDBC или другой Java-код, который его использует. Java-метод, который вы использовали для получения этих значений - вызывайте его из Matlab (с вашим JAR на пути к классам), и он должен возвращать этот массив в виде массива int8 или чего-то, что вы можете преобразовать в один.
Учитывая, что в переменной Matlab с именем "bytes" вы можете записать ее во временный файл с чем-то вроде этого.
file = [tempname() '.jpg'];
fid = fopen(file, 'wb');
fwrite(fid, bytes, 'int8');
fclose(fid);
Задавая точность 'int8', я думаю, что вы можете пропустить этап преобразования их в байты без знака, что является более распространенным соглашением. Запись int8s как 'int8' или uint8s как 'uint8' даст тот же файл. Если вам нужно преобразовать их в unsigned, используйте функцию tylabast () Matlab.
unsigned_bytes = typecast(bytes, 'uint8');
В этот момент вы можете вызвать imread для временного файла и затем удалить его.
img = imread(file);
delete(file);