最近開展的項目需要添加一個類似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