Получить цвет из 16-бит - PullRequest
0 голосов
/ 14 апреля 2020

Я играю с цветами в C#, и я хотел знать, как получить значение цвета из 16-битного байтового массива. Ниже приведен код, в котором я использую 32-битный байтовый массив.

                var colorArray = new Color[b.Length/4];                
                for (var i = 0; i < b.Length; i += 4)
                {
                    var color = Color.FromArgb(b[i + 0], b[i + 1], b[i + 2], b[i + 3]);
                    colorArray[i / 4] = color;
                }

1 Ответ

0 голосов
/ 14 апреля 2020

Вы в основном сдвигаете старшие значащие биты каждого поля в нужном месте в новом формате и маскируете все пропущенные биты в ноль. Зеленый разделен на два байта. Это было бы проще, если бы массив представлял собой массив 16-битных целых, но если он в байтах, то манипулирование битами для пары байтов примерно так.

+----+----+----+----+----+----+---+---+---+---+---+---+---+---+---+---+
|               byte1                 |             byte0             |
+----+----+----+----+----+----+---+---+---+---+---+---+---+---+---+---+
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+----+----+----+----+----+----+---+---+---+---+---+---+---+---+---+---+
| -  |          Red           |       Green       |       Blue        |
+----+----+----+----+----+----+---+---+---+---+---+---+---+---+---+---+

B8 = (byte0 << 3) & 0xF8;
G8 = ((byte1 << 6) & 0xC0) || ((byte0 >> 2) & 0x38);
R8 = (byte1 << 1) & 0xF8;

B8G8R8 = B8 | (G8 << 8) || (R8 << 16);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...