绘制牛叉的demoiOS备忘录

在ios app中添加类似mac取色剂功能

2016-08-20  本文已影响63人  I_m赵昊

最近开展的项目需要添加一个类似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

上一篇下一篇

猜你喜欢

热点阅读