最近开展的项目需要添加一个类似mac中的取色剂功能,即点击屏幕上的任意一点之后就能获取到该点颜色,这个使用mac的同志们都不会陌生。
表达有限,图片来凑:
核心代码如下,根据当前的点击位置获取颜色:
//当前点击位置的颜色
- (UIColor *) colorOfPoint:(CGPoint)point
{
unsigned char pixel[4] = {0};
//创建RGB色彩空间
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
/**
*创建上下文
data 指向要渲染的绘制内存的地址。这个内存块的大小至(bytesPerRow*height)个字节
width bitmap的宽度,单位为像素
height bitmap的高度,单位为像素
bitsPerComponent 内存中像素的每个组件的位数.例如,对于32位像素格式和RGB 颜色空间,你应该将这个值设为8.
bytesPerRow bitmap的每一行在内存所占的比特数
colorspace bitmap上下文使用的颜色空间。
bitmapInfo 指定bitmap是否包含alpha通道,像素中alpha通道的相对位置,像素组件是整形还是浮点型等信息的字符串。
*/
CGContextRef context = CGBitmapContextCreate(pixel, 1, 1, 8, 4, colorSpace, kCGBitmapAlphaInfoMask & kCGImageAlphaPremultipliedLast);
//CGContext画图片是反的,需反转
CGContextTranslateCTM(context, -point.x, -point.y);
//将界面内容渲染至上下文
[self.view.layer renderInContext:context];
//释放上下文及色彩空间
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
//返回该点的颜色
UIColor *color = [UIColor colorWithRed:pixel[0]/255.0 green:pixel[1]/255.0 blue:pixel[2]/255.0 alpha:pixel[3]/255.0];
return color;
}
演示例子已上传至github
gtihub地址:https://github.com/zhaozhenbo/CGColor_test