Цвет кодируется 3-мя байтами, например белый: ff ff ff или в переводе в десятичную систему: 16777215 - в таком виде Кибор и сохраняет цвета пиксели в массивах, когда захватывает с экрана. Нужно получить отдельные байты цветов из переменных по указателю из dll на C++ чтобы дальше с ними можно было отдельно работать.
Суть задачи состоит в том, чтобы через Dll производить операции с цветами в массивах пикселей, конкретно мне сейчас нужно более гибко отслеживать динамические пиксели по отдельным цветовым каналам, а это невозможно сделать в Кибор.
Можно, как вариант, прямо в Киборе раскладывать цвета на 3 составляющих через: rvalue(a) / gvalue(a) /rvalue(b) и класть в отдельные массивы, чтобы в таком виде передавать в dll, но это работает очень долго(
1. Skycrew - 07 Ноября, 2019 - 08:18:37 - перейти к сообщению
2. Zireael - 07 Ноября, 2019 - 17:06:37 - перейти к сообщению
Вопрос-то в чём? Если разложить цвет на каналы, то можно так:
CODE:
// код C++
#include <iostream>
int main()
{
int color = 10054493; // цвет
int R = color & 255; // красный
int G = (color >> 8) & 255; // зелёный
int B = color >> 16; // синий
std::cout << R << " " << G << " " << B;
}
#include <iostream>
int main()
{
int color = 10054493; // цвет
int R = color & 255; // красный
int G = (color >> 8) & 255; // зелёный
int B = color >> 16; // синий
std::cout << R << " " << G << " " << B;
}
3. Skycrew - 08 Ноября, 2019 - 00:44:24 - перейти к сообщению
Zireael пишет:
Вопрос-то в чём? Если разложить цвет на каналы, то можно так:
CODE:
// код C++
#include <iostream>
int main()
{
int color = 10054493; // цвет
int R = color & 255; // красный
int G = (color >> 8) & 255; // зелёный
int B = color >> 16; // синий
std::cout << R << " " << G << " " << B;
}
#include <iostream>
int main()
{
int color = 10054493; // цвет
int R = color & 255; // красный
int G = (color >> 8) & 255; // зелёный
int B = color >> 16; // синий
std::cout << R << " " << G << " " << B;
}
Супер! Именно это было и нужно. Выручаешь уже не в первый раз) Спасибо большое!!