如何使用kCGImagePropertyGIFImageColorMap或创建颜色表?

时间:2013-06-09 20:34:59

标签: objective-c cocoa core-graphics

我正在尝试在Core Graphics中修改一些GIF属性,例如kCGImagePropertyGIFImageColorMapkCGImagePropertyGIFHasGlobalColorMapreference)。

我正在创建动画GIF,我想看看我是否可以通过播放大量的颜色来提高质量。我只发现了one other code sample,我不确定它是否有效。

我尝试使用上面链接的几个示例代码,但它似乎不起作用。设置kCGImagePropertyGIFHasGlobalColorMap似乎也没有做任何事情。感谢

1 个答案:

答案 0 :(得分:4)

Core Graphics不允许设置全局颜色表,只允许设置单图像GIF文件的本地颜色表。多图像gif文件需要设置每个图像的各个属性,这意味着当源图像本身不是GIF文件时kCGImagePropertyGIFImageColorMap将无效,并且linked gist中的代码是错误的。您可以使用图像上下文或通过在添加图像时设置图像的属性来使用Core Graphics操作,而不是尝试设置全局颜色贴图,而是将您尝试串联的每个图像设置为属性。到图像目的地参考

如果您仍然想知道GIF颜色表,那么giflib库可以比我更好地解释它们,这可能是比Core Graphics更好的途径,用于生成gif并操纵它颜色表。如果您要使用Core Graphics路线并仍想知道如何实例化颜色表,则通用格式如下:

// Color tables are arrays of 8-bit bytes from 0 (deepest black) to 255 (brightest white)
// with each color's intensity grouped in 3's 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  }