PDA

Просмотр полной версии : Получить цвет пикселей по линии с++


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
не используй бесконечный цикл, это плохо, и используй поточную задержку в 500 млсек.


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

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


через windowproc (https://www.blast.hk/redirect/aHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG 93cy93aW4zMi9hcGkvd2ludXNlci9uYy13aW51c2VyLXduZHBy b2M). кстати там задержка не нужна.

Gafask
06.03.2022, 23:16
через windowproc (https://www.blast.hk/redirect/aHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG 93cy93aW4zMi9hcGkvd2ludXNlci9uYy13aW51c2VyLXduZHBy b2M). кстати там задержка не нужна.


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

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


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

Apsapeh
08.03.2022, 03:36
Цвет пикселя - C++ - Киберфорум (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cuY3liZXJmb3J1bS5ydS9jcHAtYmVnaW5uZX JzL3RocmVhZDI2ODU5NDkuaHRtbA)

Цвет пикселя 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
Цвет пикселя - C++ - Киберфорум (https://www.blast.hk/redirect/aHR0cHM6Ly93d3cuY3liZXJmb3J1bS5ydS9jcHAtYmVnaW5uZX JzL3RocmVhZDI2ODU5NDkuaHRtbA)

Цвет пикселя 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
Да, код рабочий. Но не быстрый как рассчитывалось прирост к скорости около 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

O.Jeweler
22.01.2023, 04:58
Почему спустя 30 итераций функция возвращает неправильный цвет?

Gafask
25.01.2023, 02:43
Почему спустя 30 итераций функция возвращает неправильный цвет?


Была такая же проблема , но не помню как решил .

O.Jeweler
26.01.2023, 06:00
Была такая же проблема , но не помню как решил .


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