Мне нужна программа, которая читает большой кодированный файл изображения (расширение ssh, довольно редко), а затем конвертирует его в файл bmp (и наоборот).
Моей первоначальной идеей была структура, похожая на:
public interface FileWrapper{
//example: reads a row from the ssh file using RandomAccessfile
// and decodes/reorders into pixel list
public List<Pixel> getImageRow(int rowNr);
}
Где getImageRow () уже декодирует поток построчно.
Строка за строкой будет полезна, поскольку bmp записывает изображение вверх ногами, и поэтому я могу использовать его для записи потока в bmp следующим образом:
for(int rowNr = imgHeight;rowNr > 0; rowNr --){
byte[] row = convertToRGBArray(getImageRow(rowNr));
bufferedOutputStream.write(row);
}
Проблема в некоторых типах кодирования: данные скремблированы между 2 или более строками. Получение и декодирование / переупорядочивание x строк, а затем выбрасывание других неиспользуемых строк при вызове getImageRow () кажется действительно расточительным и неэффективным.
С другой стороны, хранение всего изображения в памяти также не является идеальным.
Есть ли какие-то корректировки, которые я мог бы внести, или другая общая структура для учета этих разных типов кодирования?