Форум: "Media";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
ВнизКак отобразить большой Bitmap на PaintBox.Canvas (100-200 Mb) Найти похожие ветки
← →
Zorik (2003-06-26 16:30) [0]Я работаю з большими изображениями (отсканироваными диаграмами) - узкими по ширине и очень длинными по высоте и возникает проблема: большие файлы не грузятся стандартным способом [Bitmap.LoadFromFile(FileName)] - не хватает ресурсов.
Я нашел пример в книге как заMAPить файл и отображать даные прямо из файла. Но тут возникли еще проблемы:
1) в книге была строка кода для получения масивов битов типа
Memory:=@(pb^[bmFile^.bfOffBits]);
Работало медленно при перерисовке, но правильно. Я ее изменил (не знаю почему) на
Memory:=@(pb^[bmFile^.bfOffBits+2]);
Работает быстро, но палитра утрачивается (становится синяя)
2) Из масива битов мне нодо получить информацию о цвете конкретной точки с координатами (X,Y). Как это правильно сделать?
color:=pb^[x+y*width] - дает что-то неправильное.
Спасибо.
← →
AlexT1000 (2003-06-26 17:28) [1]а сколько бит на пиксель в твоих битмапах?
от этого все и зависит
судя потому что у тебя синий цвет выходит 24 бита на пиксель
поэтому получить значение цвета скорее всего надо так
colot : TColor
color:=pb^[x * 3 + y*width * 3]
← →
AlexT1000 (2003-06-26 17:32) [2]ну и + 2 убрать естественно
← →
Mihey (2003-06-26 18:41) [3]Есть ссылка:
http://www.sigmap.com/ezgis_articles_01.htm
и ещё видел на Torry компоненты для отображения больших изображений.
← →
Zorik (2003-06-27 09:31) [4]Спасибо. Уже что-то ближе, но цвета смещаются в сторону красного. Обьясните пожалуйста зависимость между битами и тем как выводить изображения. Может в книге была опечатка и ошибка. Если у кого-то есть пример кода как замапить битмап и коректно отображать его з масштабированием - пришлите!
← →
Оля (2003-06-28 12:22) [5]Ув Zorik!Если вы решили свои проблемы,то пожалуйста помогите и мне. Мне тоже надо написать функцию загрузки файла bmp на painbox. Очень вас прошу.
← →
Fenik (2003-06-28 13:13) [6]> Оля © (28.06.03 12:22)
> функцию загрузки файла bmp на painbox.
Даа... И мне тоже.
Только сначала скажите, что такое painbox? Не TPaintBox ли случайно?
← →
Zorik (2003-07-03 14:34) [7]Привет!
Люди, у меня начинает что-то уже получатся. Есть 2 варианта:
1) Загрузить биты bitmap в оперативную память, и отображать на PaintBox.Canvas при помощи функций WindowsAPI. Выиграш в таком случае в том, что при увеличении рисунка системе не нужно запоминать его увеличеную копию - она просто помнит оригинал и "растягивает" его на канву. Но может снизится скорость отображения (при прокрутке заметно).
2) Копировать бити изображения куда-то в Temp в своем формате и из этого файла выводить даные на екран. В таком случае оперативка почти не загружается, но скорость вывода падает.
Оля и Fenik, если Вы еще не нашли ничего - то загляните сюда на следующей неделе, а если нашли - скажите мне please!
← →
Fenik (2003-07-05 01:49) [8]> Zorik © (03.07.03 14:34)
Fenik © (28.06.03 13:13) - это была ирония :))
--
Я тут покопался в голове и нашёл:
1. Не использовать TPaintBox.
2. Создать компонент потомок от TWinControl, который будет отвечать за вывод.
3. Естественно не делать увеличенную копию растра под масштаб, а выводить в увеличенном виде лишь видимую часть сначало на temp битмап (можно и сетку на него сразу), а потом его уже выводить на компонент. У temp"a размеры равны размерам видимой части компонента.
Я, как раз, делаю такую штуковину с собственной прокруткой. Хочу, понимаешь, рисовать полоски прокрутки по-другому.
--
PaintBox - имхо пример "неоконного" компонента с канвой, но не больше. Использовать его в рабочих проектах - есть очень плохо! Он только для обучения.
Про TImage вообще молчу (пожалуйста, переубедите меня!).
← →
Zorik (2003-07-07 17:28) [9]У меня уже оверфлоу!!! Снова закидываю эту работу. Если шото найдете - пишите на gzoreslav@mail.ru
P.S. Переубеждать не буду- я тоже так думаю. А TWinControl- это круто. Я поисследовал разные графические редакторы и сделал вывод- все они загружают изображениэ в оперативку. При низкоуровной загрузке bmp, мои проэкты забирают столько же ресурсов, сколько и другиэ редакторы. Но другие редакторы очень быстро выводят изображение на экран.
Если бы знать ассемблер?! (А может и как-то по другому получится)
← →
CyberStorm (2003-07-07 19:09) [10]1) Другие редакторы используют для больших растров FileMapping - адназначна :)
2) Для хранения больших растров, последние разбиваются на меньшие фрагменты (используется Quad-trees) затем происходит обработка только видимых фрагментов растра
3) третьего не дано ;)
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.037 c