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

Вниз

Обработка изображения. Метод.   Найти похожие ветки 

 
Andy BitOff ©   (2006-03-02 17:54) [0]

Посоветуйте, какой лучше использовать метод обраотки.
Алгоритм накидал, но вот способ... Вообщем, предстоит ОЧЕНЬ большая обработка двух битмапов с выводом результатов в третий. Придется скакать по пикселям исходных двух во всех направлениях. Я обдумывал несколько вариантов.
Можно перегнать битмапы в массивы. Достоинство: можно получать доступ к пикселям как Массив[x,y]- удобно.
Можно создать массивы указателей на горизонтальные линии (ScanLine). Менее удобный доступ.
Ну и использовать непосредственно ScanLine и прыгать туда сюда. Это мне вообще не нравится.
Может еще какие варианты есть?

Максимально важна скорость.


 
TUser ©   (2006-03-02 18:19) [1]

Я за массив сканлайнов.


 
Crash Coredump ©   (2006-03-02 18:22) [2]

GetDIBits ?


 
MBo ©   (2006-03-02 18:24) [3]

http://www.delphimaster.ru/articles/pixels/index.html


 
StriderMan ©   (2006-03-02 21:13) [4]

не надо никуда копировать!

TBitMap.Canvas.Pixels[x,y]


 
GrayFace ©   (2006-03-03 10:21) [5]

Могу дать измененную версию http://www.delphimaster.ru/articles/pixels/index.html - исправлено несколько багов, скорость чуть побольше и еще некоторые усовершенствования.

> StriderMan ©   (02.03.06 21:13) [4]
> не надо никуда копировать!
>
> TBitMap.Canvas.Pixels[x,y]

Перечитай в сабже почледнее предложение.


 
Andy BitOff ©   (2006-03-03 11:28) [6]

StriderMan ©   (02.03.06 21:13) [4]
Смешно =)


 
Andy BitOff ©   (2006-03-03 11:31) [7]

GrayFace ©   (03.03.06 10:21) [5]
Конечно надо, т.к. я уже начал с ней работать. Если принципиальных изменений не вненесно, то ладно, а иначе переписывать придется ;)
Жду ссылочку.


 
Amoeba ©   (2006-03-03 11:49) [8]

Если важна скорость или хотя бы обрабатывается большое кол-во пикселей, то ни в коем случае не использовать св-во Pixsels, иначе хорошие тормоза будут обеспечены.


 
StriderMan ©   (2006-03-03 12:10) [9]


> Если важна скорость или хотя бы обрабатывается большое кол-
> во пикселей, то ни в коем случае не использовать св-во Pixsels,
>  иначе хорошие тормоза будут обеспечены.


посмотрел исходники TCanvas

GetPixel := Windows.GetPixel(FHandle, X, Y);

чутье подсказывает что API не очень быстро это дело отработает, так что признаю Вашу правоту

но копирование всех точек в массив тоже не быстрая операция, да еще и памяти порядочно займет


 
Andy BitOff ©   (2006-03-03 12:55) [10]


StriderMan ©   (03.03.06 12:10) [9]
но копирование всех точек в массив тоже не быстрая операция, да еще и памяти порядочно займет

ScanLine сделает это за 00:00.000, а TBitMap.Canvas.Pixels[x,y] за 02:23.385.
У меня на все функции счетчик вренени написан и на моих изображениях получаются такие результаты. А памяти не так уж и много, если учесть то, что все изображения 8-битные.

GrayFace ©   (03.03.06 10:21) [5]
ЖДУ.


 
Andy BitOff ©   (2006-03-03 13:03) [11]

StriderMan ©   (03.03.06 12:10) [9]
посмотрел исходники TCanvas
GetPixel := Windows.GetPixel(FHandle, X, Y);
чутье подсказывает что API не очень быстро это дело отработает...


Цитата из статьи по ссылке выше:

Причины низкой скорости доступа к Pixels вкратце таковы: при каждом таком обращении вызываются функции API SetPixel или GetPixel, которые должны заблокировать передаваемый контекст устройства (далее DC - Device Context), определить текущее преобразование координат, с его учетом проверить, попадает ли пиксел в доступный регион DC, установить или прочитать значение цвета пиксела с преобразованием к нужному цветовому формату, что осуществляется c помощью "блиттинга" - копирования прямоугольного участка DC, после чего разблокировать DC. Все это требует существенных затрат процессорного времени (в том числе и на переход в режим ядра и назад).


 
GrayFace ©   (2006-03-04 14:46) [12]

Отправил. Есть одно несовместимое изменение: я ввел свойство QPixels - работа с пикселями "напрямую". В случае палитры это номер цвета, в случае 24,32 bit - перевернутый цвет. Поэтому, флаг работы с палитрой я убрал.


 
Andy BitOff ©   (2006-03-04 16:24) [13]

GrayFace ©   (04.03.06 14:46) [12]

Получил, спасибо.



Страницы: 1 вся ветка

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

Наверх




Память: 0.5 MB
Время: 0.028 c
2-1143536503
Revan
2006-03-28 13:01
2006.04.09
Массивы


3-1140007823
atruhin
2006-02-15 15:50
2006.04.09
Потеряна информация при сбое питания Firebird


4-1137854444
Qstream
2006-01-21 17:40
2006.04.09
USB i D.


15-1142606592
DelphiLexx
2006-03-17 17:43
2006.04.09
Локализция языка программы написанной на Delphi


3-1139579835
VadimSpb
2006-02-10 16:57
2006.04.09
Проверка соединения с сервером