Эффективная обработка широких супер, но не настолько высокий, растровый?

Там какой-либо путь состоит в том, чтобы создать больше пространства, растрового / эффективного с точки зрения ресурсов растровый? В настоящее время я пытаюсь представить файл, приблизительно 800 пкс высотой но приблизительно 720000 пкс шириной. Это разрушает мое приложение, по-видимому, из-за емкости памяти доли битового массива.

Я могу сделать это более эффективно, как создание его как gif непосредственно и не позже, когда я сохраняю его?

Я пытаюсь сохранить серию строк/прямоугольников от чтения реального мира, и я хочу, чтобы это было 1 пкс в 1/100-ю из секунды.

5
задан Paul Sasik 21 January 2011 в 02:01
поделиться

5 ответов

Вам потребуется либо:

  • Принудительно установить среду x64 и загрузить стек оперативной памяти.

  • Измените архитектуру

Размер вашего изображения будет чуть больше 2 ГБ.

2
ответ дан 18 December 2019 в 09:05
поделиться

Вы должны помнить, что любое изображение, которое вы загружаете в память, независимо от того, GIF это или JPEG, или что-либо другое на диске, будет преобразовано в 32-битную битовую карту, что означает четыре байта на пиксель.

Это означает, что создаваемое вами изображение будет:

4 bytes * 800 pixels high * 720,000 pixels wide = 2,304,000,000 bytes

Пытаясь создать изображение такого размера, вы просто уничтожаете свою память.

Для всего, что вы пытаетесь сделать, ответом будет черепица и кэширование изображения.

14
ответ дан 18 December 2019 в 09:05
поделиться

Размер вашего образа составляет около 2,3 гигабайта, а самый большой объект .Net, который вы можете иметь, - 2 гигабайта, независимо от того, 32 или 64-битная машина.

Вам придется разбить растровое изображение на части, чтобы обработать изображение такого размера.

2
ответ дан 18 December 2019 в 09:05
поделиться

Могу ли я сделать это более эффективно, например, создать его как гифку напрямую, а не позже, когда я сохраню?

Вы можете сжать файл изображение, как вы его пишете. Он больше не будет в (несжатом / некодированном) формате "растрового изображения". Примеры алгоритмов сжатия включают "кодирование длины серии" и "Хаффмана".

Кроме того, используйте наименее возможный цвет - глубина: предпочтительно черно-белый, т.е. 1 бит на пиксель.

Также, возможно, сохраните его в нескольких, меньших, прерывистых фрагментах памяти: вместо одного огромного фрагмента памяти (настолько огромного, что его невозможно даже выделить в первую очередь).

0
ответ дан 18 December 2019 в 09:05
поделиться

Если вы создадите его как 720000 пикселей в высоту и 800 пикселей в ширину как BMP и поверните его при фактическом отображении (*), вы можете транслировать данные непосредственно в файл в виде растрового изображения. Может быть, использовать RLE вместо необработанного растрового изображения; В этом случае потоковая передача таким образом должна быть возможна.

(*) Отображение оставлено читателю в качестве упражнения. Вам понадобится плитка или что-то в этом роде.

0
ответ дан 18 December 2019 в 09:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: