Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.04.09;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.017 c
6-1134687059
Indy
2005-12-16 01:50
2006.04.09
[INDY] Как использовать TIdIOHandlerStream совместно с TIdNNTP?


8-1129892436
olevacho_
2005-10-21 15:00
2006.04.09
Циклическое проигрывание звукового файла


15-1142261860
Boris Marchenko
2006-03-13 17:57
2006.04.09
Делфи - быть или не очень?..


15-1142928167
Petrovski
2006-03-21 11:02
2006.04.09
Неужели Delphi на этом и закончится?


4-1137524528
HWND
2006-01-17 22:02
2006.04.09
Как узнать момент копирования текста в буфер обмена ?





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