Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.039 c
1-41182
MaG
2003-11-01 19:17
2003.11.13
Поверх всех окон


3-40915
inspirion
2003-10-20 09:21
2003.11.13
резервное копирование


1-41652
snlnik
2003-10-19 20:10
2003.11.13
проверка существования ключа в реестре


3-40931
Alrksandr
2003-10-17 19:06
2003.11.13
Нужно ли из DLL при работе с АДО вызывать Coinitialize?


6-41870
TButton
2003-09-05 20:50
2003.11.13
Сокеты





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский