Вот в чем проблема. У меня есть большой набор плиток JPEG размером 512x512 пикселей в виде обычных файлов jpg.
Я написал программу, которая делает кучу вещей и в конце должна сшить все эти файлы в один огромный JPEG.
Прежде всего, я НЕ хочу использовать ImageMagick для этого, а выполняю это в моем программном обеспечении!
В Delphi невозможно скопировать файл JPG на другой холст JPG, поэтому сначала необходимо создать TBitmap, затем тайлы копируются на холст TBitmap, а затем TBitmap конвертируется в изображение jpeg и сохраняется в файл.
Проблема возникает, когда размеры результирующего файла слишком велики (например, 20 000 x 20 000 пикселей). Когда я вызываю TBitmap.SetSize, я, естественно, получаю сообщение об ошибке (нехватка памяти или что-то в этом роде).
Я провел несколько тестов с помощью Photoshop на том же компьютере и смог создать сложный (непустой) файл размером 30 000 x 30 000 и сохранить его в формате JPEG.
Итак, вопрос в том, как я мог сделать то же самое? Ищете способ сшить все эти JPEG-файлы, записав результат прямо на диск или используя какой-то другой трюк? ...
Несмотря на то, что 20k x 20k пикселей кажутся достаточно большими, это значение применимо только к моей машине (4 ГБ оперативной памяти), поэтому меньшее количество оперативной памяти будет еще более ограничивать программное обеспечение!
Спасибо
Изменить: уточнить:
Я бы хотел найти способ сшить эти маленькие изображения JPG и записать большое, не сохраняя большое изображение в ОЗУ. Очевидно, чтение / запись потока растровых изображений возможно непосредственно на диск (не уверен), но это приведет к ОЧЕНЬ большому файлу. Итак, если формат JPG не позволяет этого сделать, подойдет любой другой сжатый формат, например TIFF или PNG. Я также хотел бы избежать чрезмерного повторного сжатия, чтобы не потерять (уже сжатое) исходное качество JPG.
Следовательно, идеальным решением будет способ напрямую читать маленькие файлы и каким-то образом записывать в большой. Размеры плиток - 256x256 или 512x512 на тот случай, если это поможет для некоторого выравнивания при сжатии JPEG.