Как конвертировать цвет пикселя ABGR в ARGB?

163
27 сентября 2018, 16:50
ARGB getPixelColor(HWND hWnd, int x, int y)
{
    HDC dc = GetDC(hWnd);
    ARGB color = GetPixel(dc, x, y);
    ReleaseDC(hWnd, dc);
    return color;
}

использую эту функцию получаю значение ABGR например 0x000248ac но мне нужно ARGB 0x00ac4802 подскажите как мне "инвертировать" это значение?

Answer 1
uint32_t ABGR_to_ARGB(uint32_t abgr)
{
  uint32_t tmp = ((abgr >> 16) ^ abgr) & 0xFF;
  return abgr ^ ((tmp << 16) | tmp);
}

Другой вариант (ссылаясь на ответ от @Maxim Egorushkin здесь)

uint32_t ABGR_to_ARGB(uint32_t abgr) 
{
  uint32_t grab = abgr >> 16 | abgr << 16;
  return (abgr & 0xFF0FF00) | (grab & 0x00FF00FF);
}

Если ваш компилятор достаточно умен для того, чтобы сообразить, что abgr >> 16 | abgr << 16 - это ни что иное как циклический сдвиг abgr на 16, то этот вариант странслируется в очень компактный машинный код на платформах с инструкцией циклического сдвига.

Answer 2
unsigned int ABRGtoARGB(unsigned int rgba)
{
    return (rgba & 0x00FF0000) >> 16 | (rgba & 0x0000FF00) | (rgba & 0x000000FF) << 16;
}

разобрался

READ ALSO
Количество обращений к методам класса C++

Количество обращений к методам класса C++

Имеется класс, содержащий большое количество методов:

173
Как в Xcode прочесть нажатие клавиши без остановки программы?

Как в Xcode прочесть нажатие клавиши без остановки программы?

Нужно прочесть нажатие клавиши в циклеПробовал примерно так:

202
Помогите реализовать патерн Мост (Bridge)

Помогите реализовать патерн Мост (Bridge)

Составить программу, что обеспечивает создания ежедневнгоо и Недельного отчета продаж для некоторых магазинов в формате текстового файла...

181
error MSB6006: &ldquo;cmd.exe&rdquo; exited with code -1073741515

error MSB6006: “cmd.exe” exited with code -1073741515

Собираю проект на TeamCityЭтот же проект на Jenkins собирается без проблем, а на TeamCity падает на нескольких json

192