图片格式简介
RGB1
、
RGB4
、
RGB8
都是调色板类型的
RGB
格式,在描述这些媒体类型的格式细节时,通常会在
BITMAPINFOHEADER
数据结构后面跟着一个调色板(定义一系列颜色)。它们的图像数据并不是真正的颜色值,而是当前像素颜色值在调色板中的索引。
CGImage
在IOS中,进过处理的图片数据会被保存在CGImage对象中,而8位图的调色板会被保存在CGImage的颜色空间CGColorSpace中。
我们可以通过如下几个函数获取8位图的调色板数据
CGImageGetColorSpace
CGColorSpaceGetNumberOfComponents
CGColorSpaceGetColorTable
然后可以对调色板进行处理,之后再根据处理之后的调色板创建新的图片数据
CGImageCreateCopyWithColorSpace
CGColorSpaceRef genericColorSpace = CGImageGetColorSpace(inImage);
int nCom = CGColorSpaceGetNumberOfComponents(genericColorSpace);
CGColorSpaceModel model = CGColorSpaceGetModel(genericColorSpace);
int size = CGColorSpaceGetColorTableCount(genericColorSpace);
unsignedchar table[768] = { UCHAR_MAX };
CGColorSpaceGetColorTable(genericColorSpace, table);
genericColorSpace = CGColorSpaceCreateDeviceRGB();
for (int i = 0; i < 768; i++) {
//TODO: Deal with color table.
}
CGColorSpaceRef colors = CGColorSpaceCreateDeviceRGB();
CGColorSpaceRef colorSpace = CGColorSpaceCreateIndexed(colors, size, table);
CGImageRef imageRef = CGImageCreateCopyWithColorSpace(cgimg, colorSpace);
CGColorSpaceRelease(colorSpace);
CGColorSpaceRelease(colors);