|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
06.07.2010, 15:37 | #1 |
Trust no one.
Старожил
Регистрация: 07.04.2009
Сообщений: 6,526
|
Недостаточно памяти для большого битмапа
Код:
5 = 8192 х 8192 6 = 16384 х 16384 7 = 32768 х 32768 Размеры bmp файла на выходе: 5 = 128 мб 6 = 256 мб 7 = 512 мб Как собственно обойти ошибку?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ |
06.07.2010, 15:49 | #2 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
довольно странно, т.к. максимальный размер блока памяти в windows для tbitmap 2 гига, где-то еще утечка
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
06.07.2010, 15:51 | #3 |
Trust no one.
Старожил
Регистрация: 07.04.2009
Сообщений: 6,526
|
Причем вылетает на первом же шаге на
Код:
_______________________________ Поставил размер файла подкачки по требованию системы. 5-й шаг отработался. В паинте создал картинку размером 32 000 х 32 000 - тоже выдало "недостаточно памяти". 16 000 х 16 000 создался, но при сохранении выдал тот же недостаток.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ Последний раз редактировалось Alex Cones; 06.07.2010 в 16:03. |
06.07.2010, 19:01 | #4 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
А ну ка, считаем, если 24 битный (3 байта), то 32768 * 32768 * 3 = ровно 3 ГБ.
У тебя есть 3 ГБ свободной виртуальной памяти? з.ы. Если хочешь непременно такой огромный битмап, пиши его сразу в файловый поток на диск, если у тебя NTFS, то можешь писать пока место не закончится Если в Линуксе работаешь, то я не помню какие там ограничения на размер файла в файловых системах.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог Последний раз редактировалось mutabor; 06.07.2010 в 19:05. |
06.07.2010, 19:14 | #5 | ||
Trust no one.
Старожил
Регистрация: 07.04.2009
Сообщений: 6,526
|
Цитата:
Цитата:
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ |
||
06.07.2010, 19:55 | #6 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Придется отказаться от всяких оболочек в виде TBitmap, и создавать битмап ручками, и по мере создания сразу писать его на диск, а не в память. В Delphi есть удобная штука TFileStream, он вполне подходит для той части к-рая будет писать на диск. Я даже название для него придумал TStreamBitmap Кстати погугли это название, мало ли
p.s. Конечно ни о какой скорости речи быть не может, сам понимаешь, запись на диск и чтение операции не из самых быстрых.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
06.07.2010, 20:35 | #7 |
Trust no one.
Старожил
Регистрация: 07.04.2009
Сообщений: 6,526
|
Хм... Пеинт не создает 16 000 х 16 000. Не возникнет ли ситуация, что я не смогу открыть созданный файл?
Может есть обходной путь? Я выкачал карты яндекса и теперь делатю так, чтобы этими "кусочками" можно было пользоваться. Что посоветуете?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ |
06.07.2010, 21:13 | #8 | |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Я не знаю точно спецификации на виндовый битмап (был еще битмап для OS/2), есть ли ограничения на размеры и какие они. Знаю что есть разные версии битмапа, последняя кажется пятая, но очень смутно припоминаю. Все это можно глянуть где нибудь на MSDN я думаю.
Если ограничений нет, то созданный файл можно будет открыть, но... лет через десять, когда памяти у всех будет по 100 гигов А пока его можно будет открыть только вашим софтом (к-рый будет динамически подгружать из файла нужные куски). Цитата:
Можно сделать умную систему, к-рая сперва проверит как дела с памятью обстоят, и затем будет в зависимости от этого регулировать свои аппетиты, а значит и скорость работы. Оч. интересно, а в каком формате карты? Какой-то один город, или побольше? p.s. Посмотрел сколько Дубль гис кушает (это десктоп программа, карта города в ней), не более 100 мб, независимо от масштаба. Я думаю там вектор, это все объясняет, я и забыл совсем, в растре никто карты не делает.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог Последний раз редактировалось mutabor; 06.07.2010 в 21:22. |
|
06.07.2010, 22:11 | #9 | |
Trust no one.
Старожил
Регистрация: 07.04.2009
Сообщений: 6,526
|
На то, что стоит у юзверя лично мне в данном случае наплевать, поскольку этими картами буду пользоваться я и мой сотоварищ с памятью в 2 раза больше моей (у меня 2, у него 4).
Карты в таком масштабе - весь мир в размерах: 256 х 256 (сохранено) 512 х 512 (сохранено) 1024 х 1024 (сохранено) 2048 х 2048 (сохранено) 4096 х 4096 (сохранено) 8192 х 8192 (сохранено) 16384 х 16384 (пока в кусочках по 256 х 256) 32768 х 32768 (аналогично) 65536 х 65536 (аналогично. Основная цель - получить эту карту в юзабельном виде) Цитата:
Код:
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ |
|
06.07.2010, 22:37 | #10 | |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
В любом случае лучше вектор (хотя, смотря какая карта). А если растр, как например на том же гугле вид со спутника, то там тайлами сделано, подгружается нужный кусок, если перетянул карту дальше, тот убирается (или в кэш, но лучше убрать) и подгружается новый, при изменении масштаба либо генерируются на лету растры из какого-то одного, либо под каждый масштаб своя база.
Цитата:
65536 х 65536 это 12 гб в общем. Если разбить его штук на 50, то будет в самый раз. Я бы написал такой класс, в к-ром есть метод Загрузить и параметры TBitmap - битмап приемник и координаты в каком-то виде При вызове этой функции она высчитает в каком/каких файле/файлах находится нужный кусок, и загрузит этот файл/файлы, и нужное скопирует в битмап приемник, к-рый можно будет обычным способом отображать. При каждом более менее большом сдвиге карты придется вызывать все время этот метод, а иначе никак, 12 гб растра в память никак не загрузишь.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог Последний раз редактировалось mutabor; 06.07.2010 в 23:00. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
"Недостаточно памяти для обработки команды..." | _-Re@l-_ | Общие вопросы Delphi | 4 | 19.06.2010 17:51 |
Недостаточно памяти для отображения | Lukker | Microsoft Office Word | 4 | 11.04.2010 08:07 |
Недостаточно памяти для обработки команды TBitMap | finder_sl | Мультимедиа в Delphi | 12 | 03.03.2010 20:40 |
Массив TBitmap, "Недостаточно памяти для обработки команды" | Роман Радер | Мультимедиа в Delphi | 5 | 05.04.2009 18:14 |
недостаточно оперативной памяти для отображения информации | VVlad69 | Microsoft Office Access | 0 | 02.04.2009 14:51 |