 |
|

06.03.2022, 07:41
|
|
Участник форума
Регистрация: 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
Либо я тупой🙄 и не так использую но он медленный.
|
|
|

06.03.2022, 08:18
|
|
Участник форума
Регистрация: 12.02.2022
Сообщений: 112
С нами:
2238751
Репутация:
48
|
|
не используй бесконечный цикл, это плохо, и используй поточную задержку в 500 млсек.
|
|
|

06.03.2022, 22:05
|
|
Участник форума
Регистрация: 10.12.2018
Сообщений: 137
С нами:
3908139
Репутация:
23
|
|
Сообщение от x0r1x
не используй бесконечный цикл, это плохо, и используй поточную задержку в 500 млсек.
Это не решит проблему, как я почитал форумы. То функция сама по себе медленная. Есть артирнатива это функция ?
|
|
|

06.03.2022, 22:07
|
|
Участник форума
Регистрация: 12.02.2022
Сообщений: 112
С нами:
2238751
Репутация:
48
|
|
Сообщение от Gafask
Это не решит проблему, как я почитал форумы. То функция сама по себе медленная. Есть артирнатива это функция ?
через windowproc. кстати там задержка не нужна.
|
|
|

06.03.2022, 23:16
|
|
Участник форума
Регистрация: 10.12.2018
Сообщений: 137
С нами:
3908139
Репутация:
23
|
|
Что-то почитал и не чего намекающего на цвет нету. Да и в сообщениях которое оно должно обрабатывать тоже что-то тихо.
|
|
|

06.03.2022, 23:51
|
|
Участник форума
Регистрация: 12.02.2022
Сообщений: 112
С нами:
2238751
Репутация:
48
|
|
Сообщение от Gafask
Что-то почитал и не чего намекающего на цвет нету. Да и в сообщениях которое оно должно обрабатывать тоже что-то тихо.
в гугле по первому запросу много примеров и способов как это сделать нормально с хорошим кодом.
|
|
|

08.03.2022, 03:36
|
|
Познающий
Регистрация: 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() вне цикла, иначе будет работать существенно медленней
|
|
|

09.03.2022, 22:52
|
|
Участник форума
Регистрация: 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 юзать .
Да и каким образом получать цвет по кд не юзая цикл. Ожидания нужного цвета = цикл. Но твой ответ верный.
|
|
|

10.03.2022, 00:55
|
|
Познающий
Регистрация: 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 млн пикселей в секунду
|
|
|

11.03.2022, 10:04
|
|
Участник форума
Регистрация: 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)
|
|
|
|