![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
Я прописал в программе алгоритм сравнения двух изображений, основанный на переборе и сравнении цвета всех пикселов по порядку первой и второй картинки. Он работает прекрасно, вот только очень медленно, особенно если изображения разрешением по 4-5 тысяч пикселов по ширине и высоте. Можно ли как-то ускорить эту работу? Может, есть более быстрый метод сравнения?
|
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 31 Всего: 484 |
Зависит от того, как сравниваешь.
Если через Pixels, то это самый медленный вариант. Если через ScanLines, то это гораздо быстрее. Ну а ещё быстрее - через DIB |
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
Я и не знал, что ScanLine можно сравнивать.
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
Еще быстрее если это изначально файлы, тогда не нужнf будет конвертировать Bitmap->DIB
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
Alexeis, а это могут быть и не файлы?
Сделал через ScanLine, все работает раз в 100 быстрее. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
Конечно! Можно их динамически в памяти создавать, грузить из ресурсов, распаковывать из сжатого потока, скачивать из интернета или получать от неизвестного заранее источника. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
А. Нет, в моем случае файлы.
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
Тогда максимального быстродействия можно было бы добиться если сначала прочитать заголовки битмапов прям из файла. Если они отличаются, то вообще нет смысла сравнивать битовые карты, если совпадают, то читать строки прям из файла и сравнивать. При использовании Scanline все же производиться двойное преобразование, но если скорость уже достаточная, то можно и не возиться. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
Alexeis, а если тупо сравнить содержимое файлов в бинарном виде? )))
-------------------- There are always someone smarter than you... |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
MetalFan, Для одинаковых картинок бинарные файлы в принципе могут отличаться. Например, содержимое байтов выравнивания не регламентируется, также версия заголовков, наличие поля масок и наличие цветового профиля не влияет на тождественность изображений.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 31 Всего: 484 |
А если png?
А если нужно вычислить процент различия, например для jpeg? Ведь далеко не факт, что это будут bmp. Мона гадать по разному - ответ зависит от вопроса. |
|||
|
||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
Моя программа поддерживает только BMP и JPEG ввиду отсутствия компонентов для работы с GIF и PNG. Вообще, назначение - поиск эквивалентов эталонной фотографии в заданной папке. Проблема в том, что она очень ресурсоемкая, то есть после 1-2 применений поиска по большим фотографиям размером 1-2 мегабайта комп буквально с ума сходить начинает и отказывается работать, хотя комп по сегодняшним меркам средний.
Я присоединил файл с исходниками программы, может, кто поможет найти причину такой сильной траты памяти? Программа небольшая, весь код в 200 строк примерно. Присоединённый файл ( Кол-во скачиваний: 10 )
Equal_Images_Finder.rar 16,86 Kb |
|||
|
||||
| Alexeis |
|
||||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
mr.Anderson а уничтожать битмапники кто будет?
создать создал а удалить не удалил. Аналогично тут
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
| mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: 3 Всего: 128 |
Нет, но потихоньку привыкаю. Вставил где надо Free() и комп перестал виснуть. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
Объекты в делфи всегда создаются в куче в отличие от С++, потому их нужно удалять.
Однако компоненты чаще всего уничтожает родитель потому их не нужно явно удалять. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |