Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.13;
Скачать: CL | DM;

Вниз

Как отобразить большой 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 вся ветка

Текущий архив: 2003.11.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.028 c
3-41102
Smolin
2003-10-23 09:53
2003.11.13
ADOconnection


4-42286
jonni
2003-09-11 04:32
2003.11.13
Structure determination


9-40773
STANT
2003-04-30 14:35
2003.11.13
Поворот спрайтов


7-42194
evle
2003-08-27 19:44
2003.11.13
Клавиатура BTC


1-41414
Yurko
2003-10-29 16:54
2003.11.13
ScrollBar