Форум: "Основная";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];
ВнизКак выводить огромную картинку на экран. Найти похожие ветки
← →
Destiny © (2004-09-14 22:39) [0]Стоит задача: вывод огромного изображения на экран с максимальным быстродействием и минимальными затратами памяти.
Все изображение загружать в image нельзя ввиду больших затрат памяти, да и ограничение на размер используемой памяти в 1.4G, по-моему не обойти, даже если DIBSection делать.
Как грузить части изображения из файла? И как оптимизировать загрузку этих частей, чтобы изображение при перемещении не подтормаживало.
Требуется осуществлять Scroll & Drag.
Спасибо.
P.S. Может подскажите ссылки на ресурсы, где можно посмотреть.
← →
wl (2004-09-14 23:35) [1]1.TImage лучше не использовать - лучше TPaintBox. это даст самый большой пророст скорости.
2.Какой формат файла? (BMP, JPG) нужно научиться извлекать данные напрямую.
3. Чтобы Drag не тормозило, нужно, пожалуй, читать со всех сторон по столько,сколько влазит на экран, потому что при достижении границ окна мышку придётся отпустить, для скролла -не знаю, тоже какое-нибудь упреждающее чтение в ту сторону, в которую идёт скролл.
← →
Defunct © (2004-09-15 05:49) [2]> Как грузить части изображения из файла? И как оптимизировать загрузку этих частей, чтобы изображение при перемещении не подтормаживало.
При объеме рисунка >=1.4Gb торможений избежать невозможно.
1.TImage лучше не использовать - лучше TPaintBox. это даст самый большой пророст скорости.
Верно, но придется переделать TPaintBox (ввести в него TBitmap) и переопределить методы Paint и Repaint, добавить TMemoryStream в который кешировать часть рисунка, например +-10 экранов во всех направленниях потребует ~300Mb оперативной памяти для разрешения 1024x768. При Drag"e и Scroll"е копировать содержимое Stream"a в Bitmap. При выходе за границу кешируемой области, загружать новую порцию данных (5-10 секунд если будет быстрый диск), (1-5 сек - RAID массив). Вывод кешируемой области тормозить не дожен вообще, подгрузка порции данных есть везде, даже в CorelDraw, так что ничего позорного в этом нет.
> 2.Какой формат файла? (BMP, JPG) нужно научиться извлекать данные напрямую.
Только BMP - проще извлекать данные и нет лишних операций по распаковке. Вытаскивать из общего рисунка видимую область через TMemoryStream и загонять в Bitmap.
← →
MBo © (2004-09-15 06:47) [3]Лучше всего разбить картинку на прямоугольные разумного размера - тогда при изменении прямоугольника вывода достаточно будет скопировать куски из максимум 4-х битмапов.
← →
Рамиль © (2004-09-15 08:32) [4]Может вот это поможет?
http://podgoretsky.com/ftp/Docs/Delphi/D7/d7stp/Glava10/Index17.html
← →
Карелин Артем © (2004-09-15 08:34) [5]компонент для быстрой работы с графикой лежит на g32.org
← →
Amoeba © (2004-09-15 10:25) [6]
> Рамиль © (15.09.04 08:32) [4]
Поддерживаю! Лучшее решение - через отображение файла в память. Минимум тормозов.
← →
Defunct © (2004-09-15 10:31) [7]Amoeba © (15.09.04 10:25) [6]
может просто не хватить памяти, у автора вопроса отмечана цифра 1.4Gb памяти как - недостаточная.
IMHO здесь только позонное кеширование способно помочь.
← →
Amoeba © (2004-09-15 10:37) [8]
> Defunct © (15.09.04 10:31) [7]
Ничего подобного. Памяти хватит. Загружается в память только столько, каков размер ВИДИМОГО участка. Хватит и 256Mb. Прочитай внимательнее главку из книжки, на которую дана ссылка.
Сам в свое время пользовался приведенным там кодом для просмотра картинок из файлов BMP намного больших, чем достомный объем памяти.
← →
Verg © (2004-09-15 11:00) [9]
> Сам в свое время пользовался приведенным там кодом для просмотра
> картинок из файлов BMP намного больших, чем достомный объем
> памяти.
Прекрасно, а каков доступный объем ВАП (Виртуального Адресного Пространства), проецирование в которое и происходит? И судя из той главы - происходит целиком.
Если ты файл размерм в 2Gb спроецируешь в ВАП, то из всего ВАП сколько останется свобоного места?
← →
Defunct © (2004-09-15 11:02) [10]> Прочитай внимательнее главку из книжки, на которую дана ссылка.
Беру свои слова [7] назад. ;)
← →
DiamondShark © (2004-09-15 11:16) [11]
> Если ты файл размерм в 2Gb спроецируешь в ВАП, то из всего
> ВАП сколько останется свобоного места?
Проецировать можно кусками.
← →
Destiny © (2004-09-15 19:14) [12]Привет, всем!
Спасибо огромное за ответы, сейчас буду читать материал из ссылки.
← →
Amoeba © (2004-09-16 12:15) [13]
> Destiny © (15.09.04 19:14) [12]
Там даже есть готовый код.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.047 c