Как я могу сравнить изображения в PictureBox и ImageList? - PullRequest
0 голосов
/ 21 декабря 2010

Я использую ImageList и PictureBox в своем приложении. Я загружаю изображение в PictureBox динамически из изображения в ImageList. Мне нужно проверить, равны ли изображения в PictureBox и определенный индекс изображения в ImageList. Кто-нибудь может направить меня?

Ответы [ 3 ]

2 голосов
/ 21 декабря 2010

К сожалению, класс Image не реализует оператор == или метод Equals, что означает, что он наследует реализацию по умолчанию от класса Object, который просто проверяет, совпадают ли ссылки на объекты.Оказывается, это не удастся, даже если изображение назначено на PictureBox непосредственно из вашего ImageList.

Итак, вам нужно будет реализовать собственную логику, чтобы проверить, являются ли изображениятот же самый.Есть пара разных подходов.Вы можете либо загрузить каждое из двух изображений в байтовый массив и выполнить побайтовое сравнение, либо вы можете циклически проходить по двум изображениям попиксельно и сравнивать их цвета.Конечно, оба эти метода будут где-то от относительно до неоправданно медленного.Потенциально вы можете оптимизировать, просто сравнив сначала измерения (объект Image предоставляет свойство Size , которое возвращает его измерения) и вернув False, если они не равны, но, вероятно, это не такработать в вашем случае, так как все изображения в ImageList будут иметь одинаковые размеры.

Если бы это был я, я избавил бы себя от проблем и просто сохранил бы индекс изображения в ImageList, который я присвоил PictureBox где-то в переменной уровня класса ...

Если вы все еще решительны, несмотря на мои предупреждения, см. Ответы на этот похожий вопрос .

1 голос
/ 27 марта 2011

Чувак вместо того, чтобы идти за списком изображений.просто зайдите со списком.У меня есть запрограммированный инструмент на C #, который требует 2 ввода от пользователя.Во-первых, это папка, которая содержит большую часть изображений, а во-вторых, входное изображение (чьи похожие изображения вам нужно отделить от основной массы изображений.

  1. , когда брать входную папку.содержимое папки в listBox, т.е. путь к каждому изображению в папке.

  2. теперь, поскольку у вас есть путь к каждому изображению в папке, снимайте изображения одно за другим вa Изображение для растрового изображения и сравните его с исходным изображением, которое вы дали ранее. Используйте любые методы или метрику сходства, чтобы выяснить, в какой степени или в каком процентном отношении изображения одинаковы.%, а затем отделить их от основной массы изображений (это опять легко, поскольку у вас есть путь к каждому изображению в папке.)

Я не знаю, к чемуВ какой-то степени я прояснил себя. Надеюсь, это помогло вам. Удачи

0 голосов
/ 11 октября 2013

Существует абсолютное решение

Назначить значение для изображения.

Пометить по-разному для каждого изображения

Эторешение, то вы можете сравнить на основе значения тега

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...