ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Общие вопросы программирования (https://forum.antichat.xyz/forumdisplay.php?f=206)
-   -   Получить цвет пикселей по линии с++ (https://forum.antichat.xyz/showthread.php?t=1424748)

Gafask 06.03.2022 07:41

Подскажите пожалуйста метод для более быстрого получения цвета пикселей чем 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



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

x0r1x 06.03.2022 08:18

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

Gafask 06.03.2022 22:05

Цитата:

Сообщение от x0r1x

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

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

x0r1x 06.03.2022 22:07

Цитата:

Сообщение от Gafask

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

через windowproc. кстати там задержка не нужна.

Gafask 06.03.2022 23:16

Цитата:

Сообщение от x0r1x

через windowproc. кстати там задержка не нужна.

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

x0r1x 06.03.2022 23:51

Цитата:

Сообщение от Gafask

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

в гугле по первому запросу много примеров и способов как это сделать нормально с хорошим кодом.

Apsapeh 08.03.2022 03:36

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

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

www.cyberforum.ru


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

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

Пример:





Код:

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



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

Gafask 09.03.2022 22:52

Цитата:

Сообщение от 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 юзать .

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

Apsapeh 10.03.2022 00:55

Цитата:

Сообщение от 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



https://forum.antichat.xyz/attachments/27994073/

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

Gafask 11.03.2022 10:04

[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


Время: 00:36