horacy
Известный
- 110
- 97
вам нужно преобразовать int в HEX, а затем в RGB.Как color перевести в RGB и обратно? Так же этот RGB передать в AddMessage (RefChat)
Очень поможет, может глупый вопрос, но все же
Не надо выдавать ответы гадая, будьте добры, мне нужен корректный ответ который написан не на рандом, что color состоит из r g b давайте разобьем и т.д.
Я несколько раз пытался, криво косо получается и не выдает нужный мне цвет, поэтому пришел сюда за помощью
C++:rakhook::on_receive_rpc += [](unsigned char& id, RakNet::BitStream* bs) -> bool { if (id == 93) { bs->ResetReadPointer(); uint32_t color; bs->Read(color);
Однако исходный формат — RGBA, а не RGB, отсюда и путаница. Это весь код, который меняет DWCOLOR на RGB и наоборот.
Жду вашей реакции 👍, пишите, если что-то не поняли.
dwcolor to rgb:
void inttorgb(int color,int colors[3])
{
colors[0] = (color >> 16) & 0xFF;
colors[1] = (color >> 8) & 0xFF;
colors[2] = color & 0xFF;
}
case RPC_ClientMessage:
{
BitStream bsData(rpcParams->input, rpcParams->numberOfBitsOfData / 8, false);
uint32_t dwStrLen;
uint32_t dwColor;
char szMsg[1000];
static char last_servermsg[256];
static DWORD allow_show_again = 0;
bsData.Read(dwColor);
bsData.Read(dwStrLen);
if (dwStrLen >= sizeof(szMsg)) dwStrLen = sizeof(szMsg) - 1;
bsData.Read(szMsg, dwStrLen);
szMsg[dwStrLen] = '\0';
std::stringstream ss;
ss << std::hex << dwColor;
std::string hexValue = ss.str();
std::string color= "000000";
int check = 8-hexValue.length();
for (size_t i = check; i < 6; i++)
{
color[i] = hexValue[i - check];
}
int relint = std::stoi(color, nullptr, 16);
addMessageToChatWindow("int rgba: %d hex rgba: %x hex rgb: %s {%s}test color",dwColor,dwColor, color.c_str(),color.c_str());
int colors[3];
inttorgb(relint,colors);
addMessageToChatWindow("int to rgba: red %d green %d blue %d", colors[0], colors[1], colors[2]);
int rgbtoint = (colors[0] << 16) | (colors[1] << 8) | colors[2];
addMessageToChatWindow("rgb to int: %d", rgbtoint);
}
Последнее редактирование: