Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Сравнение картинок Добавлено: 14.03.07 23:58  

Автор вопроса:  Эндрю | Web-сайт: www.пока_нет.ru | ICQ: 303-304-826 
На форме два 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-сайт: team16.tut.su
 Профиль | | #2
Добавлено: 15.03.07 07:51
Япредполагаю что он Point пользовался а не GetPixel

Ответить

Номер ответа: 3
Автор ответа:
 Эндрю



ICQ: 303-304-826 

Вопросов: 24
Ответов: 103
 Web-сайт: www.пока_нет.ru
 Профиль | | #3
Добавлено: 15.03.07 14:46
Я использовал GetPixel.
А через GetDIBits будет быстрее?
И как использовать Point?

Ответить

Номер ответа: 4
Автор ответа:
 D o c a l



ICQ: 408802757 

Вопросов: 76
Ответов: 985
 Web-сайт: www.doc-source.pp.net.ua/
 Профиль | | #4
Добавлено: 15.03.07 16:29
text1.text=Picture1.point(x,y)

Ответить

Номер ответа: 5
Автор ответа:
 D o c a l



ICQ: 408802757 

Вопросов: 76
Ответов: 985
 Web-сайт: www.doc-source.pp.net.ua/
 Профиль | | #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
сравнить байтовые массивы bt1() == bt2()


чушь!

Ответить

Номер ответа: 10
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #10 Добавлено: 16.03.07 18:18
чушь!
это почему же?

Ответить

Номер ответа: 11
Автор ответа:
 D o c a l



ICQ: 408802757 

Вопросов: 76
Ответов: 985
 Web-сайт: www.doc-source.pp.net.ua/
 Профиль | | #11
Добавлено: 16.03.07 21:28
Point наоборот самый медлинный способ

А кто казал што он бистрий я разказивал о Getdibits

Ответить

Номер ответа: 12
Автор ответа:
 Эндрю



ICQ: 303-304-826 

Вопросов: 24
Ответов: 103
 Web-сайт: www.пока_нет.ru
 Профиль | | #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
чушь!

это почему же?


хотя бы потому, что на это компилятор будет ругаться несовпадением типов.

З.Ы. И на это тоже:

bt1 = bt2

Ответить

Номер ответа: 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. какое нах несовпадение у байтовых массивов?

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам