Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
7 / 7 / 2
Регистрация: 29.12.2015
Сообщений: 27

Быстрый поиск цвета пикселя на экране монитора

18.01.2016, 09:26. Показов 5672. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите как можно реализовать быстрый поиск определеного пикселя на экране. Накидал работоспособный код, но он очень долго ищет в цикле.

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
Public Class Form1
    Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Integer, ByVal x As Integer, ByVal y As Integer) As Integer
    Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Integer) As Integer
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For Y = 0 To 1079
            For X = 0 To 1919
                If SerchPosi(X, Y) = "255,255,255" Then
                    MsgBox(X & " " & Y)
                End If
 
                X = X + 1
            Next
            Y = Y + 1
        Next
    End Sub
 
    Private Function SerchPosi(ByRef X As Integer, ByRef Y As Integer) As String
        Dim ret As String
        Dim lColor As Integer
        Dim lDC As Integer
        lDC = GetWindowDC(0)
 
        lColor = GetPixel(lDC, X, Y)
        Dim r As Integer = lColor Mod 256
        Dim g As Integer = (lColor \ 256) Mod 256
        Dim b As Integer = lColor \ 256 \ 256
        ret = r & "," & g & "," & b
        Return ret
    End Function
End Class

Что делать в данном случаи и как ускорить работу? Может есть другие варианты решения данной проблемы?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.01.2016, 09:26
Ответы с готовыми решениями:

Определение цвета пикселя на экране
Ребят, сразу прошу не счесть за тупость. Я гуглил! Представим, у меня есть на экране область, цвет которой периодически меняется и может...

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

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

5
Покинул форум
3701 / 1484 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
18.01.2016, 13:08
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Imports System
Imports System.Drawing
 
Module Pixel
  Sub Main()
    Dim szScreen As New Size( _
        My.Computer.Screen.Bounds.Width, _
        My.Computer.Screen.Bounds.Height _
    )
    Dim imgScreen As New Bitmap( _
        My.Computer.Screen.Bounds.Width, _
        My.Computer.Screen.Bounds.Height _
    )
    
    Using g As Graphics = Graphics.FromImage(imgScreen)
      g.CopyFromScreen(New Point(0, 0), New Point(0, 0), szScreen)
    End Using
    
    Dim pixel = imgScreen.GetPixel(23, 100) ' какой-нибудь пиксель
    Console.WriteLine(pixel)
  End Sub
End Module
0
7 / 7 / 2
Регистрация: 29.12.2015
Сообщений: 27
19.01.2016, 21:45  [ТС]
Данный пример определяет цвет 1 пикселя. К то муже у меня он не заработал к сожалению. Но я нашел неплохую функцию возвращающую все положения пикселей определенного цвета.

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Shared Function FindAllPixelLocations(img As Bitmap, color As Color) As List(Of point)
    Dim points As New List(Of point)()
    Dim c As Integer = color.ToArgb()
    Dim x As Integer = 0
    While x < img.Width
        Dim y As Integer = 0
        While y < img.Height
            If c.Equals(img.GetPixel(x, y).ToArgb()) Then
                points.Add(New Point(x, y))
            End If
            System.Math.Max(System.Threading.Interlocked.Increment(y),y - 1)
        End While
        System.Math.Max(System.Threading.Interlocked.Increment(x),x - 1)
    End While
    Return points
End Function
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
20.01.2016, 00:59
Лучший ответ Сообщение было отмечено LexoS как решение

Решение

Более быстрая процедура определения координат пикселей заданного цвета. Сравнение скорости выполнения (с предложенной функцией) показано на рисунках (время в миллисекундах). Чем больше растр тем расхождения больше.
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
Public Function fastFindPxLocation(ByVal bmp00 As Bitmap, ByVal cc As Color) As List(Of Point)
    Try
        Dim w As Integer = bmp00.Width, h As Integer = bmp00.Height
        Dim r1 As Byte = cc.R, g1 As Byte = cc.G, b1 As Byte = cc.B
        Dim lst As New List(Of Point)
        Dim bmp As New Bitmap(w, h, PixelFormat.Format24bppRgb)
        bmp = bmp00.Clone()
        Dim bmpData As BitmapData = bmp.LockBits(New Rectangle(0, 0, w, h), System.Drawing.Imaging.ImageLockMode.ReadWrite, bmp.PixelFormat)
        Dim ptr As IntPtr = bmpData.Scan0
        Dim ww As Integer = bmpData.Stride
        Dim nn As Integer = ww * h, x, y As Integer
        Dim bt(nn - 1) As Byte
        System.Runtime.InteropServices.Marshal.Copy(ptr, bt, 0, nn)
        For i As Integer = 0 To bt.Length - 1 Step 3
            If bt(i) = b1 AndAlso bt(i + 1) = g1 AndAlso bt(i + 2) = r1 Then
                y = (i / 3) \ w
                x = (i / 3) - y * w
                lst.Add(New Point(x, y))
            End If
        Next
        System.Runtime.InteropServices.Marshal.Copy(bt, 0, ptr, nn)
        bmp.UnlockBits(bmpData)
        Return lst
    Catch ex As Exception
        MsgBox(ex.ToString)
        Return Nothing
    End Try
End Function
Миниатюры
Быстрый поиск цвета пикселя на экране монитора  
5
7 / 7 / 2
Регистрация: 29.12.2015
Сообщений: 27
24.01.2016, 20:20  [ТС]
Спасибо большое.
А можно код разбора List(Of Point) пожалуйста.
0
4709 / 3662 / 857
Регистрация: 02.02.2013
Сообщений: 3,518
Записей в блоге: 2
24.01.2016, 20:33
А можно код разбора List(Of Point)
Не понял.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.01.2016, 20:33
Помогаю со студенческими работами здесь

Изменение цвета на экране монитора
Уважаемые гуру, прошу Вашей помощи! Задача заключается в следующем. На компьютере работает программа (программа написана неизвестно на...

неправильные цвета на экране монитора
Вобщем пытался собрать слабенький компьютер из имеющегося добра.Нашол старую GeForce 5600 FX лежала примерно год без дела,до этого всё было...

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

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

Поиск пикселя и поиск изображения на экране
Переписываю код из clickermann для запуска его на C++. Мне нужны две функции которые выполняли бы сканирование экрана и поиск пикселя...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru