как сгенерировать большое изображение в компактном фреймворке

Мне нужно сгенерировать большие изображения (изображение A4 с разрешением 200 точек на дюйм, формат PNG подойдет) в моем компактном каркасном приложении. Это невозможно сделать стандартным способом из-за ограничений памяти (такое большое изображение вызовет исключение OOMException).

Есть ли какая-нибудь библиотека, которая предлагает создание потокового изображения с файловой поддержкой?

Или я мог бы сгенерировать много меньших полос изображений (каждая полоса представляет собой строку большого изображения) с использованием стандартного подхода Bitmap, но мне нужно объединить их потом - есть ли какой-либо метод, как объединить много меньших изображений в одно большое без необходимости создать экземпляр большого Bitmap (что снова вызовет OOM)?


person Buthrakaur    schedule 04.05.2010    source источник


Ответы (3)


У меня была такая же потребность, и я заканчиваю писать свою собственную библиотеку. PNGJ Может показаться вам полезным, это Java, но он должен быть легко переносимым на C # (полностью независимым от других библиотек). Он записывает и читает изображения PNG (кроме изображений с палитрой), строчно-ориентированные, довольно низкого уровня, оптимизированные для работы с огромными изображениями. В загрузке есть несколько примеров.

Обновлено: я сделал C # здесь: PNGCS

person leonbloy    schedule 04.05.2010
comment
это выглядит многообещающе - я постараюсь переписать его на .Net, если не найду другого метода решения проблемы. Благодарность - person Buthrakaur; 04.05.2010

Это интересно ... Я немного погуглил для вас, и единственная полезная вещь, которую я нашел, - это OpenNETCF Smart Device Framework. Ссылка на библиотеку классов находится здесь. Предлагаем вам взглянуть на ImagingFactoryClass. CreateImageEncoderToStream может оказаться полезным.

Было бы здорово, если бы у вас была библиотека, которая сделает это за вас. Я взглянул на спецификации PNG, и это не очень многообещающе.

Удачи, надеюсь, это поможет.

person m0s    schedule 04.05.2010
comment
Я уже использую OpenNetCF SDF, но пропустил метод CreateImageEncoderToStream. Мы изучим его и сообщим о любом прогрессе. - person Buthrakaur; 04.05.2010

Я только что сделал быструю базовую реализацию класса кодирования потока PNG - на данный момент он поддерживает только 8bpp и оттенки серого, но этого достаточно для моего сценария. Довольно легко расширить класс для поддержки RGB и большей глубины цвета.

http://gist.github.com/393409

person Buthrakaur    schedule 07.05.2010