Подтвердить что ты не робот

Как использовать kCGImagePropertyGIFImageColorMap или создать таблицу цветов?

Я пытаюсь переделать пару свойств GIF, таких как kCGImagePropertyGIFImageColorMap и kCGImagePropertyGIFHasGlobalColorMap (reference) в Core Графика.

Я создаю анимированные GIF файлы, и я хотел бы посмотреть, могу ли я улучшить качество, играя с количеством цветов. Я нашел еще один пример кода, и я не уверен, что он работает.

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

4b9b3361

Ответ 1

Core Graphics не позволяет устанавливать глобальную таблицу цветов, а также локальную таблицу цветов для файла GIF с одним изображением. Для файлов изображений с несколькими изображениями требуются индивидуальные свойства каждого изображения, что означает, что kCGImagePropertyGIFImageColorMap не будет иметь эффекта, если исходные изображения не являются самими файлами GIF, а код в связанный gist является неправильным. Вместо того, чтобы пытаться установить глобальную цветовую карту, задайте свойства каждого из изображений, которые вы пытаетесь объединить, и которые можно манипулировать с помощью Core Graphics с помощью контекста изображения или путем установки свойств изображения при их добавлении к ссылке назначения изображения.

Если вы все еще интересуетесь таблицами цветов GIF, они лучше объясняются библиотекой giflib, которая вероятно, будет намного лучше, чем Core Graphics для генерации gif и манипулирования его цветовой таблицей. Если вы переходите на основной графический маршрут и все еще хотите знать, как создать таблицу цветов, общий формат выглядит следующим образом:

// Color tables are arrays of 8-bit bytes from 0 (deepest black) to 255 (brightest white)
// with each color intensity grouped in 3 for a total of 9 values.
// The format is interpreted as hex values.
const uint8_t colorTable[9] = { 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0xFF };
//                            {   White Bytes  }, {   Red Bytes  }, {   Blue Bytes  }