быстро записать png

Резюме

Я хочу записать файл .png как можно быстрее, без забота о сжатии. То есть меня не особо волнует размер файла, но мне важно, чтобы запись происходила как можно быстрее.

Мотивация

Я делаю картографическое веб-приложение, используя OpenLayers на стороне клиента и python / C ++ на стороне клиента. Приложение должно иметь возможность быстро рисовать динамический контент, когда пользователь перемещается по карте. У меня работают версии как на основе плитки (плитка 256x256), так и на основе одного изображения («одна плитка»), но в обоих случаях самая медленная часть внутренней визуализации фактически сохраняет изображение как файл png (независимо от того, включен ли -диск или в памяти).Например, я могу сгенерировать "raw", "tga" или "tiff" версию определенного представления примерно за 200 мс, но для создания версии .png требуется больше 1,2 секунды только потому, что .png сохранение занимает почти целую секунду, в то время как время фактического сохранения в других форматах составляет 100 мс или меньше (и даже несмотря на то, что размер «сырого» файла в пять раз превышает размер файла .png). И это время сохранения файла также значительно больше, чем время на передачу результирующего изображения с сервера на клиент. (Одним из важных свойств моего приложения является то, что в целом «серверная часть» будет работать на том же компьютере, что и браузер, поэтому время передачи незначительно, даже для файлов большого размера.)

Я думал, что смогу записывать .png быстро (при использовании libpng из C ++) путем вызова

    png_set_compression_level( png_ptr, 0 );

перед вызовом любых функций png_write _... . Однако, хотя этот вызов действительно мешает libpng сжимать файл (размер результирующего файла примерно равен размеру файла .raw), он не делает сохранение .png заметно быстрее.

Пожалуйста, помогите

Мне нужно использовать .png для этих изображений, потому что мне нужно, чтобы они были прозрачными наложениями поверх базовой карты, а мне нужно больше 256 цветов, предлагаемых GIF. OpenLayers просто использует теги html img, поэтому я понимаю, что могу использовать только допустимые форматы img.

Я бы подумал, что есть способ быстро записать файл .png, не выполняя никакого реального сжатия (я понимаю, что .png «всегда сжимается», но я предполагал, что это может включать «нулевое сжатие»).Похоже, вы должны иметь возможность писать как простой фиксированный заголовок, за которым следуют несжатые данные, за которым следует фиксированный нижний колонтитул. Или, может быть, та же идея, но построчно. Дело в том, что я могу очень быстро выполнять всевозможные циклы через эти 2,5 МБ необработанных данных в памяти на C ++ и очень быстро выгружать их в различные форматы файлов, поэтому кажется, что я смогу сбросить их в фиксированном , несжатый формат .png также быстро.

Звучит правильно? Вы знаете, где я могу найти примеры кода, который это делает?

22
задан M Katz 30 October 2011 в 01:49
поделиться