Сравнение изображений в PictureBox

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Сравнение изображений в PictureBox

Сообщение Alex[fj] » 14.10.2007 (Вс) 15:34

Всем привет!
Очень нужна ваша помощь... :roll:
Есть два PictureBox'а(Pic1, Pic2), в одном изображение есть(Pic1), другой "пустой". В тот, который пустой, в ходе работы программы помещается изображение (из ресурсов программы).
Так вот, мне нужно узнать, если вставленное изображение то же, что и изображение в Pic1.

Заранее спасибо :)
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Сравнение изображений в PictureBox

Сообщение iGrok » 14.10.2007 (Вс) 16:07

Alex[fj] писал(а):Всем привет!
Очень нужна ваша помощь... :roll:
Есть два PictureBox'а(Pic1, Pic2), в одном изображение есть(Pic1), другой "пустой". В тот, который пустой, в ходе работы программы помещается изображение (из ресурсов программы).
Так вот, мне нужно узнать, если вставленное изображение то же, что и изображение в Pic1.

Заранее спасибо :)

То есть? Как это, "то же"? Можешь сравнить их попиксельно )))
Но скорее всего есть более правильный вариант. Вот только задание нифига не понятно, чтобы этот вариант найти.
label:
cli
jmp label

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Сообщение Alex[fj] » 14.10.2007 (Вс) 16:10

Например у меня в Pic1.image = my.resourses.abc(ну или как-то так)
И в Pic2 попадает то же самое изображение с тем же именем и пропорциями. Как мне это узнать?
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

StimorolD3DX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 293
Зарегистрирован: 03.04.2007 (Вт) 18:19
Откуда: Kiev city

Сообщение StimorolD3DX » 14.10.2007 (Вс) 18:06

попробуй "if pic1.picture=pic2.picture then"

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Сообщение Alex[fj] » 14.10.2007 (Вс) 18:17

Хех :) Ну это первое, что напрашивается для сравнения картинок :) Только вот не прокатывает... Нельзя их просто так сравнивать, ругается...
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 14.10.2007 (Вс) 22:05

Ок. Немного поподробнее. Как в Pic2 попадает то же изображение? Тоже из ресурсов?
label:
cli
jmp label

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 15.10.2007 (Пн) 1:06

Alex[fj]
Естественно не прокатывает, потому что ссылки ведут к разным картинкам...
Подпись проходит рефакторинг

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Сообщение Alex[fj] » 15.10.2007 (Пн) 17:24

iGrok, именно оттуда :)
Lumen, спасибо... Но от этого не легче :)
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 15.10.2007 (Пн) 17:28

Ну так ты помимо загрузки рисунка из ресурсов запоминай их номера, да и сравнивай... Или что-то мешает?
label:
cli
jmp label

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Сообщение Alex[fj] » 15.10.2007 (Пн) 17:34

Ну... Рисунок в Pic2 кидается (Drag&Drop) из какого-то еще бокса, коих несколько :lol: И я не знаю, из какого кинут... Поэтому... Эм... Я не совсем загружаю картинку :roll:
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 15.10.2007 (Пн) 19:59

А как оно попадает в эти боксы? Тоже с твоей помощью? Тогда в чем проблема? Отслеживай Drag'n'Drop'ы.

Ну а если не можешь отследить из какого бокса, то
iGrok писал(а):Можешь сравнить их попиксельно )))

Сравнив для начала ширину и высоту.

Сравнивать по цветам точек. .Point(x,y)

Хотя это изврат )
label:
cli
jmp label

asharky
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 22.06.2004 (Вт) 0:39
Откуда: Батоны-ларьки-поребрики...

Сообщение asharky » 15.10.2007 (Пн) 20:12

Alex[fj] писал(а):Ну... Рисунок в Pic2 кидается (Drag&Drop) из какого-то еще бокса, коих несколько :lol: И я не знаю, из какого кинут... Поэтому... Эм... Я не совсем загружаю картинку :roll:
Поднимись чуть выше по реализации алгоритмов перемещения объекта типа картинка. Изначально сделай объектом не просто картинку, а структуру типа
1. Картинка
2. Уникальный идентификатор (можно UUID использовать например).

И отслеживай уже не картинки, а идентификаторы. Их сравнивать чутка попроще будет :)

А попиксельно - суксь. Грузить проц такми задачами, ну для чего?
Последний раз редактировалось asharky 16.10.2007 (Вт) 9:12, всего редактировалось 1 раз.
В культурной столице проститутки берут книгами...

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 16.10.2007 (Вт) 1:05

Вот и я о том.. Что можно-то оно можно.. Но вот не нужно. Совсем не нужно.
label:
cli
jmp label

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Сообщение Alex[fj] » 18.10.2007 (Чт) 9:15

asharky, знать бы еще как это реализовать...

Решил в уголке изображения поставить точечку, по которой и буду сравнивать...
iGrok
Только вот нет в .net PicBox.point
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 18.10.2007 (Чт) 11:44

Ну GetPixel-то наверное есть...
Подпись проходит рефакторинг

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Сообщение Alex[fj] » 18.10.2007 (Чт) 12:46

Я знал и до этого, что ручки у меня не оттуда растут... Но вот, что сдесь-то не так?

Код: Выделить всё

Label1.Text = GetPixel (TestBox.Handle, 1, 1).ToString


Говорит, "function has unbalanced the stack" :(
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 18.10.2007 (Чт) 13:51

приступ телепатии показал, что
а. функция объявлена с использованием Long
б. она тебе нафиг не нужна
в. юзать надо Bitmap.LockBits
г. а также поиск рулит неимоверно
Весь мир матрица, а мы в нем потоки байтов!

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Сообщение Alex[fj] » 18.10.2007 (Чт) 14:57

а. спасибо, действительно
б. поверю на слово
в. ничего подобного
г. согласен

GSerg писал(а):Короче Smile
Зацениваем функцию GetDIBits. С её помощью элементарно легко получаем картинку в виде массива Long (местный Integer Smile). Сравниваем! Поэлементно Smile


Помогите разобраться с функцией... Мне кажется, самое приемлимое решение... :roll:
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Сообщение Alex[fj] » 18.10.2007 (Чт) 16:37

Сделал в итоге так :)
Код: Выделить всё
Dim pic1 As Bitmap = pic.Image
        Dim pic2 As Bitmap = TestBox.Image
        Dim x As Integer
        Dim y As Integer = 0
        Dim val1, val2 As Color

        For x = 0 To 75

            val1 = pic1.GetPixel(x, y)
            val2 = pic2.GetPixel(x, y)

            If val1 <> val2 Then
                MsgBox("sadfasd")
            End If
        Next

Пока изъяна не нашел :) Спасибо всем, кто помогал :)
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 18.10.2007 (Чт) 18:30

Alex[fj] писал(а):
GSerg писал(а):Короче Smile
Зацениваем функцию GetDIBits. С её помощью элементарно легко получаем картинку в виде массива Long (местный Integer Smile). Сравниваем! Поэлементно Smile


Помогите разобраться с функцией... Мне кажется, самое приемлимое решение... :roll:

Дело в том. что GetDIBits рулит в API и GDI, а в NET и в GDI+ рулит как раз таки LockBits. Это как бы аналоги.

ADD: Твой вариант с GetPixel медленный, через все ту же LockBits ты бы все сделал бы гораздо быстрее.
ADD2: И дочитай тот топик, откуда ты принес цитату GSerg до конца. Пользительно, весьма.
Весь мир матрица, а мы в нем потоки байтов!


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 91

    TopList