Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/14: Рейтинг темы: голосов - 14, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 33

Поиск на экране определенного оттенка цвета

24.09.2012, 21:40. Показов 2718. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можно ли сделать так чтобы программа искала на мониторе определенный оттенок цвета, который будет дан ей и нажимала левой кнопкой мыши для на эту точку, в которой находится этот оттенок?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.09.2012, 21:40
Ответы с готовыми решениями:

Выделения области определенного цвета на экране
Есть ли программа для выделения области определенного цвета на экране? Хочу автоматизировать процесс выделения не характерных форм...

Процентное содержание пикселей определенного цвета на экране
Доброго времени суток, форумчане) Бьюсь с задачей никак не получается ее сделать, определить процент пикселей одного определенного цвета по...

Получение RGB цвета определённого пикселя на экране
Необходимо получить RGB цвет пикселя который находится на кординатах x и y. Как это сделать?

15
 Аватар для edward_freedom
1569 / 1448 / 303
Регистрация: 01.10.2011
Сообщений: 2,636
24.09.2012, 22:38
С поиском походу не дружишь
0
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 33
24.09.2012, 22:44  [ТС]
Цитата Сообщение от edward_freedom Посмотреть сообщение
Спасибо. Но я не знаю английского) Все же попробую что нибудь понять..
0
 Аватар для edward_freedom
1569 / 1448 / 303
Регистрация: 01.10.2011
Сообщений: 2,636
24.09.2012, 22:53
DubStep, а зачем там все читать?
Вот все что тебя интересует, сам пользовался в свое время этим примером
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
Code Snippet
Option Strict On
Option Explicit On
 
Imports System.ComponentModel
Imports System.Drawing.Imaging
Imports System.Runtime.InteropServices
 
Public Class Form1
 
    Private rand As Random
    Private colorToFind As Integer = &HFFFF0000 ' &HFF all rest are &HFE
    Private WithEvents b As New Button
    Private colorPoint As Point
 
    Sub New()
        ' This call is required by the Windows Form Designer.
        InitializeComponent()
        ' Add any initialization after the InitializeComponent() call.                
        b.Location = New Point(10, 10)
        b.Text = "go"
        Me.Controls.Add(b)
        rand = New Random
    End Sub
 
    ' Create a random colored bitmap, quickly.
    Private Function GetRandomColorBitmap(ByVal size As Size) As Bitmap
        Dim bm As New Bitmap(size.Width, size.Height)
        Dim bmd As BitmapData = bm.LockBits(New Rectangle(New Point, size), ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb)
        Dim colors(size.Width * size.Height - 1) As Integer
        For i As Integer = 0 To colors.Length - 1
            colors(i) = rand.Next(Integer.MinValue, Integer.MaxValue) Or &HFE000000
        Next
        Marshal.Copy(colors, 0, bmd.Scan0, colors.Length)
        bm.UnlockBits(bmd)
        Return bm
    End Function
 
    ' The point just happens to be on the form, it can also be Off the form...
    Private Sub b_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles b.Click
        b.Visible = False
        MessageBox.Show("I'm going to draw 1 pixel on the form with a unique red color, then I'm going to wait for 1 second, then I'm going to draw random mess all over the form, and redraw the pixel on top, then I'm going to move the mouse over the pixel and click.")
        Using g As Graphics = Me.CreateGraphics
            colorPoint = New Point(rand.Next(0, Me.ClientSize.Width), rand.Next(0, Me.ClientSize.Height))
            g.FillRectangle(New SolidBrush(Color.FromArgb(colorToFind)), New Rectangle(colorPoint, New Size(1, 1)))
            g.DrawEllipse(Pens.Black, New Rectangle(colorPoint.X - 10, colorPoint.Y - 10, 20, 20))
        End Using
        Threading.Thread.Sleep(1000)
        Dim backg As Bitmap = GetRandomColorBitmap(Me.ClientSize)
        Using g As Graphics = Graphics.FromImage(backg)
            g.FillRectangle(New SolidBrush(Color.FromArgb(colorToFind)), New Rectangle(colorPoint, New Size(1, 1)))
          End Using
        Me.BackgroundImage = backg
        Application.DoEvents()
        Dim searchRectangle As New Rectangle
        searchRectangle.Location = Me.PointToScreen(New Point) ' top left of client area
        searchRectangle.Size = Me.ClientSize
        Dim foundPt As Point = PixelSearch(searchRectangle, colorToFind)
        Me.Text = String.Format("Pixel location in bitmap: ({0},{1})", foundPt.X.ToString, foundPt.Y.ToString)
        ' move mouse and click
        Cursor.Position = New Point(foundPt.X + searchRectangle.X, foundPt.Y + searchRectangle.Y)
        NativeMethods.MouseClick()
    End Sub
 
    Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
        b.Visible = True
        Dim pt As Point = Me.PointToClient(Cursor.Position)
        MessageBox.Show(String.Format("Point clicked:{0}{1}Color point:{2}", _
                pt.ToString, Environment.NewLine, colorPoint.ToString))
    End Sub
 
    ' returns (-1, -1) if not found
    Private Function PixelSearch(ByVal rec As Rectangle, ByVal colorToFind As Integer) As Point
        ' Right, there is one pixel on the form in the correct color.
        ' find the location in the bitmap
        Dim x As Integer = -1
        Dim y As Integer = -1
        ' First grab the screen
        Using bm As New Bitmap(rec.Width, rec.Height)
            ' Copy a portion of the screen. 
            Dim topleft As Point = New Point(rec.X, rec.Y)
            Using g As Graphics = Graphics.FromImage(bm)
                g.CopyFromScreen(topleft, New Point, rec.Size)
            End Using
            ' lock the bits
            Dim bmd As BitmapData = bm.LockBits(New Rectangle(0, 0, bm.Width, bm.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb)
            ' copy all pixels out into an integer array.
            Dim pixels(bm.Width * bm.Height - 1) As Integer
            Marshal.Copy(bmd.Scan0, pixels, 0, pixels.Length)
            ' find the color
            For i As Integer = 0 To pixels.Length - 1
                If pixels(i) = colorToFind Then
                    x = i Mod bm.Width
                    y = i \ bm.Width
                    Exit For
                End If
            Next
            ' unlock bm
            bm.UnlockBits(bmd)
        End Using
        Return New Point(x, y)
    End Function
 
End Class
 
Friend Class NativeMethods
 
    <DllImport("user32.dll", SetLastError:=True)> _
Private Shared Function SendInput( _
ByVal cInputs As Integer, _
ByVal pInputs() As INPUT, _
ByVal cbSize As Integer) As Integer
    End Function
 
    Private Structure INPUT
        Public dwType As Integer
        Public mi As MOUSEINPUT
    End Structure
 
    <StructLayout(LayoutKind.Sequential)> _
    Private Structure MOUSEINPUT
        Public dx As Integer
        Public dy As Integer
        Public mouseData As UInteger
        Public dwFlags As UInteger
        Public time As UInteger
        Public dwExtraInfo As IntPtr
    End Structure
 
    Private Const INPUT_MOUSE As Integer = 0
    Private Const MOUSEEVENTF_LEFTDOWN As Integer = &H2
    Private Const MOUSEEVENTF_LEFTUP As Integer = &H4
    Private Const MOUSEEVENTF_MIDDLEDOWN As Integer = &H20
    Private Const MOUSEEVENTF_MIDDLEUP As Integer = &H40
    Private Const MOUSEEVENTF_MOVE As Integer = &H1
    Private Const MOUSEEVENTF_ABSOLUTE As Integer = &H8000
    Private Const MOUSEEVENTF_RIGHTDOWN As Integer = &H8
    Private Const MOUSEEVENTF_RIGHTUP As Integer = &H10
 
    ' not accurate!
    Public Shared Sub MoveMouseAndClick(ByVal x As Integer, ByVal y As Integer)
        Dim inputs(2) As INPUT
        For i As Integer = 0 To inputs.Length - 1
            inputs(i).dwType = INPUT_MOUSE
        Next
        inputs(0).mi.dwFlags = MOUSEEVENTF_MOVE Or MOUSEEVENTF_ABSOLUTE
        ' oh, this isn't accurate. I've abandoned it and used Cursor.Position instead.
        inputs(0).mi.dx = Convert.ToInt32(Math.Ceiling(x * 65535 / Screen.PrimaryScreen.Bounds.Width))
        inputs(0).mi.dy = Convert.ToInt32(Math.Ceiling(y * 65535 / Screen.PrimaryScreen.Bounds.Height))
        inputs(1).mi.dwFlags = MOUSEEVENTF_LEFTDOWN
        inputs(2).mi.dwFlags = MOUSEEVENTF_LEFTUP
        Dim cbSize As Integer = Marshal.SizeOf(inputs(0))
        Dim result As Integer = SendInput(inputs.Length, inputs, cbSize)
        If result = 0 Then
            Throw New System.ComponentModel.Win32Exception
        End If
    End Sub
 
    Public Shared Sub MouseClick()
        Dim inputs(1) As INPUT
        For i As Integer = 0 To inputs.Length - 1
            inputs(i).dwType = INPUT_MOUSE
        Next
        inputs(0).mi.dwFlags = MOUSEEVENTF_LEFTDOWN
        inputs(1).mi.dwFlags = MOUSEEVENTF_LEFTUP
        Dim cbSize As Integer = Marshal.SizeOf(inputs(0))
        Dim result As Integer = SendInput(inputs.Length, inputs, cbSize)
        If result = 0 Then
            Throw New System.ComponentModel.Win32Exception
        End If
    End Sub
End Class
1
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 33
24.09.2012, 23:00  [ТС]
edward_freedom, я новечек, 5 дней назад скачал Vb... Когда вставляю данный код в кнопку выдаёт 44 ошибки
0
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 33
24.09.2012, 23:08  [ТС]
многие исправил! осталось 6 ошибок
Миниатюры
Поиск на экране определенного оттенка цвета  
0
 Аватар для edward_freedom
1569 / 1448 / 303
Регистрация: 01.10.2011
Сообщений: 2,636
24.09.2012, 23:16
DubStep, это не обязательно
VB.NET
1
2
3
Code Snippet
Option Strict On
Option Explicit On
0
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 33
24.09.2012, 23:19  [ТС]
Все 0 ошибок! Запускаю программу и вся форма покрывается другим цветом при этом 2 сообщения вылетают по очереди, этот так и должно?
0
 Аватар для edward_freedom
1569 / 1448 / 303
Регистрация: 01.10.2011
Сообщений: 2,636
24.09.2012, 23:21
DubStep, ну ты же просил функцию для поиска цвета, я дал, что еще надо
0
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 33
24.09.2012, 23:34  [ТС]
Программа ищет цвет на форме или на всем экране?

Добавлено через 11 минут
Еще раз повторю что мне нужно. Нужна чтобы программа которая находила бы определенный оттенок пикселя на всем экране и кликала по нему и если еще есть такие цвета и по ним тоже кликала по очереди до тех пор пока не перекликает все такие пиксели данного оттенка.
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
24.09.2012, 23:42
Цитата Сообщение от DubStep Посмотреть сообщение
Нужна чтобы программа которая находила бы определенный оттенок пикселя на всем экране и кликала по нему и если еще есть такие цвета и по ним тоже кликала по очереди до тех пор пока не перекликает все такие пиксели данного оттенка.
- Делаешь скриншот экрана
- проверяешь в нем нужные цвета
- при нахождении имитируешь клик мышкой
0
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 33
24.09.2012, 23:50  [ТС]
Цитата Сообщение от nio Посмотреть сообщение
- при нахождении имитируешь клик мышкой
С этим будут большие трудности! Имитацию клика мышки смогу сделать, а вот нахождение цвета не знаю как!
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
24.09.2012, 23:55
Цитата Сообщение от DubStep Посмотреть сообщение
нахождение цвета не знаю как
перегоняешь изображение в массив, циклом проходишь по нему и сравниваешь попиксельно с искомым цветом.
0
0 / 0 / 0
Регистрация: 23.09.2012
Сообщений: 33
24.09.2012, 23:59  [ТС]
Цитата Сообщение от nio Посмотреть сообщение
перегоняешь изображение в массив, циклом проходишь по нему и сравниваешь попиксельно с искомым цветом.
Ого Я только дня 3 изучаю Vb. Массив, цикл незнакомые слова.
0
 Аватар для edward_freedom
1569 / 1448 / 303
Регистрация: 01.10.2011
Сообщений: 2,636
25.09.2012, 00:26
DubStep,
Цитата Сообщение от nio Посмотреть сообщение
- Делаешь скриншот экрана
- проверяешь в нем нужные цвета
- при нахождении имитируешь клик мышкой
VB.NET
1
2
3
4
5
6
7
8
9
10
11
Dim img As New Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)
        Dim gr As Graphics = Graphics.FromImage(img)
        gr.CopyFromScreen(New Point(0, 0), New Point(0, 0), New Size(img.Width, img.Height))
        For c As Integer = 0 To img.Width - 1
            For r As Integer = 0 To img.Height - 1
                If img.GetPixel(c, r).ToArgb = Color.FromArgb(246, 149, 0).ToArgb Then
                    Cursor.Position = New Point(c, r)
                    Return
                End If
            Next           
        Next
0
25.09.2012, 06:28

Не по теме:

Цитата Сообщение от DubStep Посмотреть сообщение
Я только дня 3 изучаю Vb
Так и начинать надо было с чего-то попроще.
Есть довольно тривиальные задачи, которые невозможно решить, не зная азов

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.09.2012, 06:28
Помогаю со студенческими работами здесь

Поиск определенного текста на экране
Доброго времени суток. ;) :) Я хочу попросить о помощи пользователей данного форума, т.к. мой уровень знаний для написания этого скрипта...

Поиск определенного пикселя на экране
Всем привет. Пишу игрового бота. Дано: Есть часть экрана размером в 1080х871 Нужно: Найти в этой части экрана пиксель с RGB цветом 231...

Поиск определенного пикселя на экране
Здравствуйте. Я хочу найти определённый пиксель на экране. Я опробовал способ через opencv: сравнение шаблона со скриншотом монитора,...

Поиск текста в ячейках определенного цвета
Добрый день, уважаемые программисты. Помогите решить вопрос. В книге находится несколько листов, некоторые ячейки которых...

Поиск координат пикселя определенного цвета
Здравствуйте, уважаемые участники форума! Я только начинаю программировать на С++ Builder. У меня вот такая вот проблема. Программа рисует...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru