HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Общие вопросы программирования
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 06.03.2022, 07:41
Gafask
Участник форума
Регистрация: 10.12.2018
Сообщений: 137
С нами: 3908139

Репутация: 23
По умолчанию

Подскажите пожалуйста метод для более быстрого получения цвета пикселей чем GetPixel.

3:





[CODE]
int
pos_x
=
0
;
while
(
true
)
{
Sleep
(
1
)
;
pos_x
++
;
if
(
pos_x
>=
100
)
pos_x
=
0
;
COLORREF color
=
GetPixel
(
GetDC
(
0
)
,
pos_x
,
50
)
;
ReleaseDC
(
GetDesktopWindow
(
)
,
GetDC
(
GetDesktopWindow
(
)
)
)
;
std
::
cout



Либо я тупой🙄 и не так использую но он медленный.
 
Ответить с цитированием

  #2  
Старый 06.03.2022, 08:18
x0r1x
Участник форума
Регистрация: 12.02.2022
Сообщений: 112
С нами: 2238751

Репутация: 48
По умолчанию

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

  #3  
Старый 06.03.2022, 22:05
Gafask
Участник форума
Регистрация: 10.12.2018
Сообщений: 137
С нами: 3908139

Репутация: 23
По умолчанию

Цитата:
Сообщение от x0r1x  

не используй бесконечный цикл, это плохо, и используй поточную задержку в 500 млсек.
Это не решит проблему, как я почитал форумы. То функция сама по себе медленная. Есть артирнатива это функция ?
 
Ответить с цитированием

  #4  
Старый 06.03.2022, 22:07
x0r1x
Участник форума
Регистрация: 12.02.2022
Сообщений: 112
С нами: 2238751

Репутация: 48
По умолчанию

Цитата:
Сообщение от Gafask  

Это не решит проблему, как я почитал форумы. То функция сама по себе медленная. Есть артирнатива это функция ?
через windowproc. кстати там задержка не нужна.
 
Ответить с цитированием

  #5  
Старый 06.03.2022, 23:16
Gafask
Участник форума
Регистрация: 10.12.2018
Сообщений: 137
С нами: 3908139

Репутация: 23
По умолчанию

Цитата:
Сообщение от x0r1x  

через windowproc. кстати там задержка не нужна.
Что-то почитал и не чего намекающего на цвет нету. Да и в сообщениях которое оно должно обрабатывать тоже что-то тихо.
 
Ответить с цитированием

  #6  
Старый 06.03.2022, 23:51
x0r1x
Участник форума
Регистрация: 12.02.2022
Сообщений: 112
С нами: 2238751

Репутация: 48
По умолчанию

Цитата:
Сообщение от Gafask  

Что-то почитал и не чего намекающего на цвет нету. Да и в сообщениях которое оно должно обрабатывать тоже что-то тихо.
в гугле по первому запросу много примеров и способов как это сделать нормально с хорошим кодом.
 
Ответить с цитированием

  #7  
Старый 08.03.2022, 03:36
Apsapeh
Познающий
Регистрация: 22.08.2021
Сообщений: 64
С нами: 2488428

Репутация: 13
По умолчанию

Цвет пикселя - C++ - Киберфорум

Цвет пикселя C++ Решение и ответ на вопрос 2685949

www.cyberforum.ru


XLAT выкладывал код мини программы, я удалил всё не нужное, оставил только функцию сканирования экрана.

Использовал в своём говно боте, работает быстро, в отличии от GetPixel

Пример:





Код:
CaptureScreen CaptureSc
;
// Считывает пиксели с экрана
CaptureSc
.
get_pixel
(
Начальное положение по X
,
Начальное положение по Y
,
Ширина
,
Высота
)
;
// Получает цвет определённого пикселя из ранее считанной области
int
*
rgb
;
rgb
=
CaptureSc
.
info
(
X координата искомого пикселя
,
Y координата искомого пикселя
)
;


Лучше используй get_pixel() вне цикла, иначе будет работать существенно медленней
 
Ответить с цитированием

  #8  
Старый 09.03.2022, 22:52
Gafask
Участник форума
Регистрация: 10.12.2018
Сообщений: 137
С нами: 3908139

Репутация: 23
По умолчанию

Цитата:
Сообщение от Apsapeh  

Цвет пикселя - C++ - Киберфорум

Цвет пикселя C++ Решение и ответ на вопрос 2685949

www.cyberforum.ru


XLAT выкладывал код мини программы, я удалил всё не нужное, оставил только функцию сканирования экрана.
Использовал в своём говно боте, работает быстро, в отличии от GetPixel

Пример:





Код:
CaptureScreen CaptureSc
;
// Считывает пиксели с экрана
CaptureSc
.
get_pixel
(
Начальное положение по X
,
Начальное положение по Y
,
Ширина
,
Высота
)
;
// Получает цвет определённого пикселя из ранее считанной области
int
*
rgb
;
rgb
=
CaptureSc
.
info
(
X координата искомого пикселя
,
Y координата искомого пикселя
)
;


Лучше используй get_pixel() вне цикла, иначе будет работать существенно медленней
Да, код рабочий. Но не быстрый как рассчитывалось прирост к скорости около 38% . Я так понял через winapi быстрого способа нету. Надо через DX11 или opencv юзать .

Да и каким образом получать цвет по кд не юзая цикл. Ожидания нужного цвета = цикл. Но твой ответ верный.
 
Ответить с цитированием

  #9  
Старый 10.03.2022, 00:55
Apsapeh
Познающий
Регистрация: 22.08.2021
Сообщений: 64
С нами: 2488428

Репутация: 13
По умолчанию

Цитата:
Сообщение от Gafask  

Да, код рабочий. Но не быстрый как рассчитывалось прирост к скорости около 38% . Я так понял через winapi быстрого способа нету. Надо через DX11 или opencv юзать .
Да и каким образом получать цвет по кд не юзая цикл. Ожидания нужного цвета = цикл. Но твой ответ верный.
Пример:





[CODE]
#include
#include
#include "XLAT_head.h"
int
main
(
)
{
using
namespace
std
;
CaptureScreen CaptureSc
;
// Перебирает 2 073 600 пикселей
int
s_1
=
clock
(
)
;
CaptureSc
.
get_pixel
(
0
,
0
,
1920
,
1080
)
;
for
(
int
x
=
0
;
x





Один раз просканируй экран через get_pixel() и потом перебирай отдельные пиксели через цикл, при таком подходе получается ~50 млн пикселей в секунду
 
Ответить с цитированием

  #10  
Старый 11.03.2022, 10:04
Gafask
Участник форума
Регистрация: 10.12.2018
Сообщений: 137
С нами: 3908139

Репутация: 23
По умолчанию

[QUOTE="Apsapeh"]

Пример:





[CODE]
#include
#include
#include "XLAT_head.h"
int
main
(
)
{
using
namespace
std
;
CaptureScreen CaptureSc
;
// Перебирает 2 073 600 пикселей
int
s_1
=
clock
(
)
;
CaptureSc
.
get_pixel
(
0
,
0
,
1920
,
1080
)
;
for
(
int
x
=
0
;
x

#include
#include "XLAT_head.h"
int
main
(
)
{
using
namespace
std
;
CaptureScreen CaptureSc
;
// Перебирает 2 073 600 пикселей
int
s_1
=
clock
(
)
;
CaptureSc
.
get_pixel
(
0
,
0
,
1920
,
1080
)
;
for
(
int
x
=
0
;
x
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.