![]() |
|
Модераторы: Snowy, Alexeis, MetalFan |
![]()
|
|
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
Здравствуйте.
Вообшем я хочю найти способ функцию, как найти различия между двумя TBitmap. Тоесть есть два снимка(скриншота 1280x1024) и хочю найти те участки в виде кардинат прямоугольников. Хотел-бы найти очень быстрый способ, что-бы был меньше 30ms. Реально-ли такое? Это сообщение отредактировал(а) Ak47black - 5.6.2007, 18:14 |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Ak47black, Чего от RLE отказался? Он быстрый. Жмет всего за 1 проход.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
А что за RLE? Я про него ничего незнаю (знаю только что такой кодек от M$ так называеться).
Насшет пересылки я посвоему буду сжимать zlib. Добавлено @ 20:38 Я хочю какбы вычислить те области на скриншоте которые изменились. Тоесть прямоугольники или квадраты. Это сообщение отредактировал(а) Ak47black - 5.6.2007, 20:38 |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Суть RLE состоит в кодировании последовательности чисел с одинаковым значением как спец символ, число повторений и сам символ который повторяется. Если вычесть одно изображение из другого получиться много черных полей, которые отлично жмутся RLE.
Добавлено через 2 минуты и 6 секунд Пример тут http://256bit.ru/informat/eu_archivs/arh5.htm -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
Alexeis, гы я чето похожее думал(я домал что какнибудь тут маску с AND или чтонибудь такое можно сделать).
Шас попробую. Добавлено через 3 минуты и 18 секунд Хмм.. тут такая проблема что
Очень много берёт время как нестранно :( |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Возможно это оптимизация делфи, т.е. операция может DDB->DIB производиться при вызове bmp1.ScanLine[0] -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
А может какой-нибудь другой есть способ получить расположения первого бита картинки?
Это сообщение отредактировал(а) Ak47black - 5.6.2007, 22:48 |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
GetDibBits(); - это то что действительно конвертирует DDB->DIB
Добавлено через 1 минуту и 51 секунду Указатель на память куда будет записан растр передается в нее, потому он известен изначально. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
Alexeis, сорри неособо понял, как твой способ заюзать( я насшет того как получить расположение первого бита)?
Это сообщение отредактировал(а) Ak47black - 6.6.2007, 14:33 |
|||
|
||||
| Alexeis |
|
||||||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Ak47black, А хелп для чего дядки из микрософта стараются пишут? Для того что бы другие дядки из борланд его в пустую передирали?
Добавлено через 12 минут и 16 секунд Фигасе
Главное тут вызов DIBNeeded;
Замечаем что для каждого вызова GetScanLine будет вызван CopyBitmap(FHandle, FPalette, FPalette, FDIB, nil); -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||||
|
|||||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
Мда тут сплошные барьеры
Alexeis, а у самого TBitmapа по другому нельзя узнать или тока так делать как-бы структуру и от нее узнавать как ты показал? Добавлено через 10 минут и 26 секунд А вообще если своими словами ,то из скольки бит pfDevice состоит? Я смотрел но так и неврубился. Если по твоиму я буду делать то у меня тут
Другое количество. У меня сам TBitmap.PixelFormat = pfDevice. Если в 24 переводить то много времени занимает. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Ak47black, в pfDevice нельзя получить доступ к битам в принципе. pfDevice годиться только для макроопераций.
Так приведенная функция как раз этим и занимается что переводит из pfDevice в pf24Bit, только это ускоренная реализация на API. Аналогично Scanline будет работать только с pf24Bit, в старых версиях делфи для pfDevice она просто не срабатывала. В новой видимо производиться проверка и автоматическое конвертирование pfDevice в pf24Bit при вызове Scanline, потому операция такая длительная. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
:( не не помогает этот код.
Вообшем если его выполнять то он занимает гдето 78ms так-же как вот этот код
А напрямую с pfDevice форматом пикселей я могу както работать или я пытаюсь сделать чтото нереальное? Это сообщение отредактировал(а) Ak47black - 6.6.2007, 20:09 |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Ak47black, очень может быть, так как основное время уходит на преобразование. Тогда думаю прийдеться грести в сторону DSPack и переходить на DirectDraw.
Добавлено @ 20:20 Еще вариант использовать GDI+, а сжимать в TIFF (он тоже использует RLE) Добавлено через 7 минут и 20 секунд
Винда не предоставляет прямой доступ к этой памяти. Это сообщение отредактировал(а) Alexeis - 6.6.2007, 20:21 -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]()
|
| Правила форума "Delphi: Звук, графика и видео" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |