Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-1095408397
wicked
2004-09-17 12:06
2004.10.03
Знатокам C++


4-1093430618
Mr. Joker
2004-08-25 14:43
2004.10.03
Пункт контекстного меню "Открыть с помощью" в Delphi


1-1095609995
tyus
2004-09-19 20:06
2004.10.03
ProgressBar


1-1095424188
VasRog
2004-09-17 16:29
2004.10.03
ComboBox


1-1095343895
M-Alex
2004-09-16 18:11
2004.10.03
Командная строка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский