Постановка задачи
Мне нужно загрузить плавающее изображение из 10 тыс. Строк и 3 тыс. Столбцов и отобразить его на JPanel, используя BufferedImage
. Если я загружаю все изображение, используя FileChannel
, я получаю JVM OutOfMemory Error. Я не могу жестко закодировать JVM для запуска с большим объемом памяти, так как это не решит проблему открытия образа на меньших компьютерах.
Я пытаюсь загрузить изображение, разделить его на тайлы и сохранить в базе данных в памяти, такой как H2, из которой я получу доступ к соответствующему тайлу и покажу его.
Проблемы
Чтобы открыть и разделить изображение на плитку, мне нужно либо открыть все изображение, которое устраняет проблему, либо прочитать каждый пиксель / число с плавающей точкой (FileInputStream), которое мучительно медленно .
(FileInputStream медленнее, чем FileChannel)
Я могу прочитать полосу (все столбцы, но с меньшим количеством строк), используя FileChannel
, и обрезать ее, чтобы создать плитку, но это снова проблема, поскольку чтение полосы зависит от количества столбцов, которые у меня есть, что опять-таки является проблемой, если количество столбцов очень велико, JVM выдаст OutOfMemoryError.
Objective
Tile: Подмножество изображения, которое может обрабатываться JVM.
Считать плитку изображения по плитке и сохранить ее в базе данных In-Memory. Если и когда мне понадобятся плитки, я извлечу их из базы данных In Memory и покажу на JPanel, используя BufferedImage
класс.