Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: поиск изображения в изображении Добавлено: 15.03.11 06:16  

Автор вопроса:  akukinakis
Вопрос: Имеется полноценное изображение (снимок экрана) и его предполагаемый фрагмент. Как определить принадлежит ли данный фрагмент нашему изображению?

Ответить

  Ответы Всего ответов: 15  

Номер ответа: 1
Автор ответа:
 akukinakis



Вопросов: 2
Ответов: 8
 Профиль | | #1 Добавлено: 15.03.11 06:31
Меня путает необходимость работы с твитами... Как можно определить цвет твита, если минимальной единицей информации в изображении является пиксель...
Моя попытка решения:

For i = x1 To Picture1.Picture.Height
   For j = y1 To Picture1.Picture.Width
      a = b = 1
      curr_j = j
      While Picture1.Point(i, j) = Picture2.Point(a, b)
         j = j + 1
         b = b + 1
         If b > deltaY Then '
            a = a + 1
            j = curr_j
            i = i + 1
         End If
             
         If a > deltaY Then
            WeWas = True
            Exit Function
         End If
      Wend
   Next j
Next i

тут:
 - x1 и y1 предполагаемая начальная точка фрагмента в исходном изображении (для ускорения поиска) в ПИКСЕЛЯХ, но нужно в твитах, наверное...
 - deltaY - высота фрагмента изображения (в пикселях)
 - curr_j - координата Х первого совпавшего пикселя фрагмента и изображения
 - WeWas - возвращаемое значение (вхождение найдено = true, иначе =false)
---------------
Интересны будут комментарии по моему коду (возможна ли работа с пикселями, а не твитами?), либо другие варианты решения.

Ответить

Номер ответа: 2
Автор ответа:
 akukinakis



Вопросов: 2
Ответов: 8
 Профиль | | #2 Добавлено: 15.03.11 06:35
ошибочка: В строке "If b > deltaY Then" должно быть "If b > deltaX Then"
где deltaX - ширина фрагмента в пикселях

Ответить

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



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #3 Добавлено: 15.03.11 09:43
1. не используй твиты
2. не используй vb6

Ответить

Номер ответа: 4
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #4
Добавлено: 15.03.11 14:41
твиты в твиттере. Может twip'ы?

Ответить

Номер ответа: 5
Автор ответа:
 VbStarter



ICQ: 357911808 

Вопросов: 118
Ответов: 1340
 Web-сайт: moscowdevils.ru
 Профиль | | #5
Добавлено: 15.03.11 15:17
AgentFire пишет:
2. не используй vb6

не буду спорить по понятным причинам,
присоединяюсь к вопросу на 6.

Ответить

Номер ответа: 6
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #6
Добавлено: 15.03.11 15:22
1. не используй твиты
2. не используй vb6

С первым согласен. Второй не в тему.

Ответить

Номер ответа: 7
Автор ответа:
 akukinakis



Вопросов: 2
Ответов: 8
 Профиль | | #7 Добавлено: 15.03.11 16:46
На счет твитов (твиПов).. у меня есть выбор? Как я могу переключиться на работу с пикселями?

(Единственно где нашел упоминание о пикселях, так это в свойстве формы и пикчербоксов "ScaleMode", но на работу методов, что я использовал выше, это никак не влияет)

Ответить

Номер ответа: 8
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #8
Добавлено: 15.03.11 17:37
Правда что ли? Вообще ScaleMode влияет непосредственно, выставляешь vbPixels и все координаты компонента будут рассчитываться в пикселах

Ответить

Номер ответа: 9
Автор ответа:
 akukinakis



Вопросов: 2
Ответов: 8
 Профиль | | #9 Добавлено: 15.03.11 18:00
Вообще ScaleMode влияет непосредственно, выставляешь vbPixels и все координаты компонента будут рассчитываться в пикселах

Очень хочу верить! Я сделал следующее:
1. Установил свойство "ScaleMode" формы и обоих пикчербоксов в "3 - Pixels"
2. В процедуре "Form_Load()" прописал:
    Form1.ScaleMode = vbPixels
    Picture1.ScaleMode = vbPixels
    Picture2.ScaleMode = vbPixels

Вопрос 1:
В каких ед. измерения в отладчике отображается, что "deltaX = 265", а "deltaY = 132"?, где:
    deltaX = Picture2.Picture.Width
    deltaY = Picture2.Picture.Height

..если размеры рисунка из пикчербокса2 = 10 на 5 пикселей, а размеры самого пикчербокса2 = 81 на 81 (непонятных мне единиц измерения, что я вижу на форме. Возможно это просто шаг сетки, но тем не менее это квадрат...)
-------------
Вопрос 2: Может я не те методы использую для доступа к ширине и высоте рисунков, загруженных в пикчербоксы?

Ответить

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



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #10
Добавлено: 15.03.11 18:48
Кто-то капчу опять крякает?

Ответить

Номер ответа: 11
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #11
Добавлено: 15.03.11 19:03
akukinakis ууу!
Picture.width/height - это не пиксели и не твипы, а vbHimetric
Вот примерный код перевода в пиксели
  1. Debug.Print Round(Picture1.ScaleX(Picture1.Picture.Width, vbHimetric, vbPixels)) _
  2.     & "x" & Round(Picture1.ScaleY(Picture1.Picture.Height, vbHimetric, vbPixels))

Ответить

Номер ответа: 12
Автор ответа:
 VbStarter



ICQ: 357911808 

Вопросов: 118
Ответов: 1340
 Web-сайт: moscowdevils.ru
 Профиль | | #12
Добавлено: 15.03.11 20:20
Morpheus пишет:
Кто-то капчу опять крякает?

откуда такое мнение, уважаемый?

Ответить

Номер ответа: 13
Автор ответа:
 akukinakis



Вопросов: 2
Ответов: 8
 Профиль | | #13 Добавлено: 15.03.11 21:03

Picture1.ScaleX(Picture1.Picture.Width, vbHimetric, vbPixels)

спасибо, попробую вечером, не за тем компом сейчас...

Ответить

Номер ответа: 14
Автор ответа:
 akukinakis



Вопросов: 2
Ответов: 8
 Профиль | | #14 Добавлено: 19.03.11 06:24
Winand пишет:
Picture.width/height - это не пиксели и не твипы, а vbHimetric
Вот примерный код перевода в пиксели...

Спасибо, я немного продвинулся в решении своей задачи, но столкнулся вот с чем:

Для теста я создал изображение из 8х1 пикселей разного цвета. Загружаю его в пикчербокс1 и пробегаюсь по нему сообщая цвет каждого пикселя. Сейчас, метод Picture1.Point(i,0) дает тот же результат что и GetPixel(Picture1.hdc,i,0).
В случае, если окно моей программы активно (не свернуто и не перекрыто другим окном) я вижу цифровой код цвета каждого пикселя изображения. Стоит мне перекрыть окно программы другим окном, в качестве кода мне отображается "-1".

Вопрос: как получить цвет пикселя изображения из Пикчербокса1 в свернутом или неактивном окне?
-----------------------------
Напомню, что загонять изображение в пикчербокс для меня не принципиально. Мне нужно определить факт наличия картинки из файла (допустим: C:\image.bmp) на экране (например, сделав скриншот и обойдя его в цикле).

Ответить

Номер ответа: 15
Автор ответа:
 akukinakis



Вопросов: 2
Ответов: 8
 Профиль | | #15 Добавлено: 22.03.11 00:01
Думаю обсуждение можно закрыть, т.к. перейдя на VB 2008 я смог разобраться с задачей. Все несложно и главное логично.
Всем спасибо

Ответить

Страница: 1 |

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



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