![]() |
|
Модераторы: Snowy, Alexeis, MetalFan |
![]()
|
|
| Darksquall |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 326 Регистрация: 22.1.2004 Где: Москва Репутация: нет Всего: 4 |
Как быстро сравнить 2 Bitmapa? хочеться быстрее чем попиксельно и scanline.
Мне нужно всего лишь узнать, отличаеться ли первый битмап от 2го (причем кол.во бит на пиксел, разрешение и размер у них одинаковые.) Может как то можно размером битмапа или хеш функцию подскажете? |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Мне кажется, что для расчета хеша придется немало потрудится (в смысле процессорного времени). Это удобно когда много картинок надо сравнить с одной, тогда не нужно иметь в памяти сразу две картинки. Расчитал ХЕШ, сравнил, и вперед. Я бы скорее сделал так, прочитал поле заголовка указывающее на начала растра в файле и скопировал бы растр целиком в буфер. Аналогично для второй картинки. И выполнил CompareMem(); функция быстрая, как раз для этого и предназначеная. Это сообщение отредактировал(а) alexeis1 - 24.8.2006, 16:49 -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Darksquall |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 326 Регистрация: 22.1.2004 Где: Москва Репутация: нет Всего: 4 |
Да хорошая штука, вот такая вот функция получилась, работает и все быстро, спасибо за подсказку.
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Ну я вообще-то предлагал сравнивать растры, а не файлы целиком. Может оказатся, что при равенстве всех указаных параметров и одинаковых растрах файлы будут разные, поскольку имеют попросту разные версии заголовков. Или один будет содержать в себе цветовой профиль, а другой будет иметь только ссылку на него. Так что гарантии, что этот код будет всегда правельно работать нет, правда завит еще от того чем создаются и модифицируются картинки. Это сообщение отредактировал(а) alexeis1 - 24.8.2006, 17:47 -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| creas0ft |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 5.8.2006 Где: Саранск Репутация: нет Всего: 2 |
А у меня в догонку такой вопрос.
Есть картинка с паттерном и несколько шаблонов. Как быстрее кроме попиксельно сравнить?! Причем паттерн по размерам может быть менее эталона.... Максимальное совпадение учитывается. --------------------
Форум программистов уклонистов в сторону сео-шмео |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Паттерн это бинарная битовая карта? Что здесь имеется ввиду я не понял -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| creas0ft |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 5.8.2006 Где: Саранск Репутация: нет Всего: 2 |
Исходная картинка битовая.
Остальные картинки тоже битовые... То есть имеем скажем картинку вида 000010000 000111000 001111110 И картинки паттернов 000000000 111111111 001110000 111111111 000000000 001110000 000010000 000111100 000111110 Делаем сравнения с искомой, и та что более совпадает и есть искомая (процентное отношение совпавших точек больше). Это сообщение отредактировал(а) creas0ft - 24.8.2006, 20:00 --------------------
Форум программистов уклонистов в сторону сео-шмео |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Ну можно сравнивать двойными словами, тогда за один раз будет производится сравнивание 32 пикселов. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: нет Всего: 146 |
предложу , такой вариант сравнения,
берем оба массива, и делаем xor друг с другом, допустим в 3 массив, после пробегаемся по 3 массиву (в котором результат) и определяем сколько бит в байте ненулевых, их считаем, на выходе делим получившееся число на общее число битов в массиве, если получится 0 значит 100% совпадение, если 1 то 0% совпадения -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Вот это как раз и самое интересное!
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: нет Всего: 146 |
самое простейшее 8 сдвигов и сравнений
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Как вариант 8 XOR c маской 8 и сравнений. Но все это медленно и не оптимально. Куда быстрее наждый бит разместить в байт.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: нет Всего: 146 |
имхо более оптимально , сделать XOR байта , и создать массив из 256 элементов, с уже посчитаными весами, и далее просто вводить значение результата ксора как индекс этого массива, и будет очень быстро
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. |
|||
|
||||
| RomanEEP |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 18.5.2006 Где: Коломна Репутация: 1 Всего: 8 |
По поводу сравнения Bitmap-ов - я думаю достаточно сравнить все пиксели, те
1) Смотрим размер одного пиксела
2)Вычисляем размер всей битовой карты
3)И сравниваем
|
||||||
|
|||||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
RomanEEP,
Это вариант сравнения на совпадение - не совпадение, а нужно сравнение с определением степени похожести. -------------------- 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. |