Страницы

Поиск по вопросам

пятница, 14 февраля 2020 г.

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

#cpp #gdi


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 подскажите как мне "инвертировать" это значение?
    


Ответы

Ответ 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, то этот вариант странслируется в очень компактный машинный код на платформах с инструкцией циклического сдвига.

Ответ 2



unsigned int ABRGtoARGB(unsigned int rgba) { return (rgba & 0x00FF0000) >> 16 | (rgba & 0x0000FF00) | (rgba & 0x000000FF) << 16; } разобрался

Комментариев нет:

Отправить комментарий