最近開展的項目需要添加一個類似mac中的取色劑功能袱院,即點擊屏幕上的任意一點之后就能獲取到該點顏色谷暮,這個使用mac的同志們都不會陌生恩急。
表達有限,圖片來湊:
核心代碼如下氯庆,根據(jù)當(dāng)前的點擊位置獲取顏色:
//當(dāng)前點擊位置的顏色
- (UIColor *) colorOfPoint:(CGPoint)point
{
unsigned char pixel[4] = {0};
//創(chuàng)建RGB色彩空間
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
/**
*創(chuàng)建上下文
data? ? ? ? ? ? ? ? 指向要渲染的繪制內(nèi)存的地址蹭秋。這個內(nèi)存塊的大小至(bytesPerRow*height)個字節(jié)
width? ? ? ? ? ? ? bitmap的寬度,單位為像素
height? ? ? ? ? ? ? bitmap的高度,單位為像素
bitsPerComponent? ? 內(nèi)存中像素的每個組件的位數(shù).例如,對于32位像素格式和RGB 顏色空間堤撵,你應(yīng)該將這個值設(shè)為8.
bytesPerRow? ? ? ? bitmap的每一行在內(nèi)存所占的比特數(shù)
colorspace? ? ? ? ? bitmap上下文使用的顏色空間仁讨。
bitmapInfo? ? ? ? ? 指定bitmap是否包含alpha通道,像素中alpha通道的相對位置实昨,像素組件是整形還是浮點型等信息的字符串洞豁。
*/
CGContextRef context = CGBitmapContextCreate(pixel, 1, 1, 8, 4, colorSpace, kCGBitmapAlphaInfoMask & kCGImageAlphaPremultipliedLast);
//CGContext畫圖片是反的,需反轉(zhuǎn)
CGContextTranslateCTM(context, -point.x, -point.y);
//將界面內(nèi)容渲染至上下文
[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