Страница: 1 | 2 |
Вопрос: Сравнение картинок
Добавлено: 14.03.07 23:58
Автор вопроса: Эндрю | Web-сайт:
На форме два PictureBox с картинками. И нужно узнать загружены одинаковые картинки или нет. Я делал через сравнение пикселей, но это кошмарно долго.
Допустим нужно сравнить два Label, то код такой: If Label1.Caption = Label2.Caption Then ... . Я делал тоже самое с PictureBox: If Picture1.Picture = Picture2.Picture Then ... , но данный код не работал.
Подскажите как сравнить два PictureBox.
Ответы
Всего ответов: 25
Номер ответа: 1
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #1
Добавлено: 15.03.07 00:11
Вместо GetPixel используй GetDIBits.
Номер ответа: 2
Автор ответа:
Bonapart
ICQ: 175256
Вопросов: 32
Ответов: 108
Web-сайт:
Профиль | | #2
Добавлено: 15.03.07 07:51
Япредполагаю что он Point пользовался а не GetPixel
Номер ответа: 3
Автор ответа:
Эндрю
ICQ: 303-304-826
Вопросов: 24
Ответов: 103
Web-сайт:
Профиль | | #3
Добавлено: 15.03.07 14:46
Я использовал GetPixel.
А через GetDIBits будет быстрее?
И как использовать Point?
Номер ответа: 4
Автор ответа:
D o c a l
ICQ: 408802757
Вопросов: 76
Ответов: 985
Web-сайт:
Профиль | | #4
Добавлено: 15.03.07 16:29
text1.text=Picture1.point(x,y)
Номер ответа: 5
Автор ответа:
D o c a l
ICQ: 408802757
Вопросов: 76
Ответов: 985
Web-сайт:
Профиль | | #5
Добавлено: 15.03.07 16:29
Не пробовал но говорят бистрие
Номер ответа: 6
Автор ответа:
Stars
Вопросов: 41
Ответов: 239
Профиль | | #6
Добавлено: 15.03.07 17:16
Point наоборот самый медлинный способ
Номер ответа: 7
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #7
Добавлено: 15.03.07 20:11
ну как-то так
Private Type BITMAPINFOHEADER '40 bytes
biSize As Long
biWidth As Long
biHeight As Long
biPlanes As Integer
biBitCount As Integer
biCompression As Long
biSizeImage As Long
biXPelsPerMeter As Long
biYPelsPerMeter As Long
biClrUsed As Long
biClrImportant As Long
End Type
'---
Private Type BITMAPINFO
bmiHeader As BITMAPINFOHEADER
bmiColors As String * 1024
End Type
Private Declare Function GetDIBits Lib "gdi32" (ByVal aHDC As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
'''
Dim bt() As Byte '
Dim bim As BITMAPINFO
bim.bmiHeader.biSize = 40
Call GetDIBits(pic.hdc, pic.Picture.handle, 0, 0, ByVal 0, bim, ByVal 0)
ReDim bt(bim.bmiHeader.biSizeImage - 1)
Call GetDIBits(pic.hdc, pic.Picture.handle, 0, bim.bmiHeader.biHeight, ByVal VarPtr(bt(0)), bim, ByVal 0)
'''
Номер ответа: 8
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #8
Добавлено: 15.03.07 20:18
P.S.
GetDIBits на порядок быстрее
Для "Сравнения картинок":
TODO:
GetDIBits(pic1.hdc,
GetDIBits(pic2.hdc,
сравнить байтовые массивы bt1() == bt2()
Умные товарищи меня поправят. (надеюсь)
Номер ответа: 9
Автор ответа:
Viper
ICQ: 249094859
Вопросов: 0
Ответов: 310
Профиль | | #9
Добавлено: 16.03.07 10:43
чушь!
Номер ответа: 10
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #10
Добавлено: 16.03.07 18:18
Номер ответа: 11
Автор ответа:
D o c a l
ICQ: 408802757
Вопросов: 76
Ответов: 985
Web-сайт:
Профиль | | #11
Добавлено: 16.03.07 21:28
А кто казал што он бистрий я разказивал о Getdibits
Номер ответа: 12
Автор ответа:
Эндрю
ICQ: 303-304-826
Вопросов: 24
Ответов: 103
Web-сайт:
Профиль | | #12
Добавлено: 17.03.07 00:46
To Viper и AgentFire: ребята! вы не спорьте, а объясните свои точки зрения.
To EUGY: и так надо до конца:
ReDim bt(bim.bmiHeader.biSizeImage - 1)
ReDim bt(bim.bmiHeader.biSizeImage - 2)
ReDim bt(bim.bmiHeader.biSizeImage - 3)
...
ReDim bt(bim.bmiHeader.biSizeImage - 40)?
И почему bim.bmiHeader.biSize приравняли к 40?
Номер ответа: 13
Автор ответа:
Viper
ICQ: 249094859
Вопросов: 0
Ответов: 310
Профиль | | #13
Добавлено: 17.03.07 09:09
это почему же?
хотя бы потому, что на это компилятор будет ругаться несовпадением типов.
З.Ы. И на это тоже:
Номер ответа: 14
Автор ответа:
EUGY
Вопросов: 0
Ответов: 454
Профиль | | #14
Добавлено: 17.03.07 09:47
to Viper:
Dim bt1() As Byte
Dim bt2() As Byte
...
...
ReDim bt1(bim1.bmiHeader.biSizeImage - 1)
ReDim bt2(bim2.bmiHeader.biSizeImage - 1)
for x=...
if bt1(x) = bt2(x) then ...
next
И где тут будет ругаться компилятор ???
to Эндрю:
bim.bmiHeader.biSize=40 : функции требуется знать длину структуры.
Ты не понял что делать с полученными массивами?
Номер ответа: 15
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #15
Добавлено: 17.03.07 11:40
Viper, учи VB. какое нах несовпадение у байтовых массивов?