Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.025 c
2-1143478492
BOB_KAMIKAZE
2006-03-27 20:54
2006.04.09
ПАНЕЛЬ ЗАДАЧ


1-1141505242
Piter
2006-03-04 23:47
2006.04.09
Как сделать, чтобы Проводник выгрузил DLL


15-1142547033
Ketmar
2006-03-17 01:10
2006.04.09
где мой значок "мастера"?


2-1142871605
{AleX}
2006-03-20 19:20
2006.04.09
ADO&MySQL


2-1143297701
Muhan_
2006-03-25 17:41
2006.04.09
Проблема с кодировками ((




   Наверх