8-битный цвет в UIColor

#ios #iphone #objective-c #uicolor

#iOS #iPhone #objective-c #uicolor

Вопрос:

Я получаю некоторый 8-битный цветовой код из XML-файла, и мне нужно представить некоторый текст с этим цветом. Например: красный цвет равен: 255 (0XE0), черный цвет равен: 0 (0X00); Как я могу инициализировать UIColor с помощью этого 8-битного кода? Действительно дорогой способ — разделить код на 3 красных бита, 3 зеленых бита и 2 синих бита, а затем разделить и умножить, и так далее, и так до сих пор. Может быть, кто-нибудь знает простой способ сделать это?

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

1. Как красный 255? Что в вашем примере будет зеленым или синим? Кроме того, использование битовой маски не очень дорого.

2. Если ваш цвет имеет кодировку RGB с битами 3: 3: 2, то 0xE0 должен быть красным, 0xC1 зеленым, а 0x03 синим — 0xFF не красный, а белый.

3. Я не вижу ничего плохого в этом вопросе, который заставил бы меня отказаться от голосования по этому вопросу!

4. использование побитовых операторов — совсем не дорогой способ. обычно они являются самыми быстрыми операторами.

5. @Constantin: Да, вы правы. Я смотрел не в том месте в XML. Красный — 0XE0. Я исправлю это.

Ответ №1:

Если ваш цвет RGB кодируется 3:3:2 битами, тогда 0xE0 он должен быть красным, 0xC1 зеленым и 0x03 синим — 0xFF не красным, а белым. Я предполагаю, что ваш пример с 0xFF красным цветом, вероятно, был неправильным. Чтобы преобразовать ваш 8-битный кодированный цвет в an UIColor , вам просто нужно применить битовую маску для цветового компонента и нормализовать значения.

Обратите внимание, что 3-битные значения имеют диапазон 0-7 , а 2-битное значение имеет только диапазон от 0-3 .

 UIColor *myColor = [UIColor colorWithRed:((bitValue amp; 0xE0) >> 5) / 7.0f) green:((bitValue amp; 0xC1) >> 2) / 7.0f) blue:((bitValue amp; 0x03) / 3.0f) alpha:1.0f];
  

Ссылка на UIColor