Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Создание большого изображения

20K
04 декабря 2008 года
infolex
16 / / 10.05.2007
Такая проблема. С#. Необходимо создать Bitmap или Image размером 25000х20000 пикселей.

В строчке
 
Код:
Bitmap bt=new Bitmap(25000,20000);


Выдает ошибку [COLOR="Red"]Troubleshooting Exceptions: System.ArgumentException: Недопустимый параметр.[/COLOR]. Если уменьшить размер изображения, то создается нормально. Кто сталкивался?
9
05 декабря 2008 года
Lerkin
3.0K / / 25.03.2003
Для справочки: указанный вами размер изображения займет в памяти около 1.5 Гб.
Я бы, на месте системы, тоже бы вызвал исключение. ;)
20K
05 декабря 2008 года
infolex
16 / / 10.05.2007
Цитата: Lerkin
Для справочки: указанный вами размер изображения займет в памяти около 1.5 Гб.
Я бы, на месте системы, тоже бы вызвал исключение.


Что самое интересное, ACDSee и фотошоп не вызывают, значит реализовать же как-то можно:) А вот Paint.NET вызывает....

1.9K
05 декабря 2008 года
andriano
474 / / 10.01.2008
Цитата: infolex
Что самое интересное, ACDSee и фотошоп не вызывают, значит реализовать же как-то можно:) А вот Paint.NET вызывает....


Вывод мне кажется простым: раз Paint.NET не подходит, - не пользоваться им.
BMP - очень простой формат, поэтому (а также для того, чтобы полностью контролировать используемую память и не выделять лишнего) в данном случае проще всего будет создавать изображение ручками.

Кстати, встречный вопрос: а 1.5 Гбайта одним куском выделить можно?

9
05 декабря 2008 года
Lerkin
3.0K / / 25.03.2003
Цитата: infolex
Что самое интересное, ACDSee и фотошоп не вызывают, значит реализовать же как-то можно:) А вот Paint.NET вызывает....


Не думаю, что менеджер памяти в Paint.NET сопоставим с менеджером памяти того же Photoshop'а... Реализовать, разумеется, можно. И довольно несложно, если внимательно присмотреться к тому, как Photoshop работает с изображениями при масштабировании.

Цитата: andriano

Кстати, встречный вопрос: а 1.5 Гбайта одним куском выделить можно?


А [FONT="Courier New"]GlobalAlloc[/FONT] - не подходит?

1.9K
05 декабря 2008 года
andriano
474 / / 10.01.2008
Цитата: Lerkin
А [FONT="Courier New"]GlobalAlloc[/FONT] - не подходит?

Честно говоря, не работал с .NET, знаю только, что работа с памятью там всячески скрывается от пользователя. Поэтому, что подходит, что - нет, сказать не могу.
И вопрос я этот задал не потому, что он меня интересует, а лишь потому, что в зависимости от ответа на него можно рекомендовать автору темы РАЗЛИЧНЫЕ способы преодоления его проблемы.

9
05 декабря 2008 года
Lerkin
3.0K / / 25.03.2003
Цитата: andriano
Честно говоря, не работал с .NET, знаю только, что работа с памятью там всячески скрывается от пользователя. Поэтому, что подходит, что - нет, сказать не могу.


И я про .NET - не в курсе.

Цитата: andriano

И вопрос я этот задал не потому, что он меня интересует, а лишь потому, что в зависимости от ответа на него можно рекомендовать автору темы РАЗЛИЧНЫЕ способы преодоления его проблемы.


Дык и я не тебе отвечал, а в "тему".

341
06 декабря 2008 года
Der Meister
874 / / 21.12.2007
andriano верно подметил про сплошной кусок: даже в неуправляемом приложении есть резерв под кучи, стеки и т. д. Bitmap .NET - суть Bitmap GDI+. Здесь декомпозиция рулит, как, впрочем, с любой объёмной или неподъёмной вещью. Согласен с Lerkin, надо менеджить уровни детализации.
5
10 декабря 2008 года
hardcase
4.5K / / 09.08.2005
Я бы как в гугель мапс поступил. Распилил бы картинку на много мелких кусков - пикселов 300х300 картинок. Ну и 3-4 уровня детализации предусмотрел, на каждом, понятное дело, свои куски рисовал. Ненужные изображения подлежат отгрузке - нужные держим в памяти.
Небольшая нагрузка как на память, так и на графическую подсистему.

З.Ы. Для справки, при отрисовке любого куска Bitmap'а в .NET он целиком перекидывается в видеопамять.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог