- (void)colorAction:(id)sender{ bgimageV.image = nil; UIColor *color = nil; int colorNum = arc4random()%2; if (colorNum == 0) color = [UIColor blackColor]; else if (colorNum == 1) color = [UIColor whiteColor]; [bgimageV setBackgroundColor:color]; [self setTextColor]; } - (void)setTextColor{ UIColor *color = nil; if(bgimageV.image != nil) color = [bgimageV.image mostColor];//这里请看这里http://www.cocoachina.com/bbs/read.php?tid=181490 else color = bgimageV.backgroundColor; if([self isLightColor:color]) [textLabel setTextColor:[UIColor blackColor]]; else [textLabel setTextColor:[UIColor whiteColor]]; } //判断颜色是不是亮色 -(BOOL) isLightColor:(UIColor*)clr { CGFloat components[3]; [self getRGBComponents:components forColor:clr]; NSLog(@"%f %f %f", components[0], components[1], components[2]); CGFloat num = components[0] + components[1] + components[2]; if(num < 382) return NO; else return YES; } //获取RGB值 - (void)getRGBComponents:(CGFloat [3])components forColor:(UIColor *)color { #if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1 int bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedLast; #else int bitmapInfo = kCGImageAlphaPremultipliedLast; #endif CGColorSpaceRef rgbColorSpace = CGColorSpaceCreateDeviceRGB(); unsigned char resultingPixel[4]; CGContextRef context = CGBitmapContextCreate(&resultingPixel, 1, 1, 8, 4, rgbColorSpace, bitmapInfo); CGContextSetFillColorWithColor(context, [color CGColor]); CGContextFillRect(context, CGRectMake(0, 0, 1, 1)); CGContextRelease(context); CGColorSpaceRelease(rgbColorSpace); for (int component = 0; component < 3; component++) { components[component] = resultingPixel[component]; } }
UIImage:获取图片主色调
-(UIColor*)mostColor{ #if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1 int bitmapInfo = kCGBitmapByteOrderDefault | kCGImageAlphaPremultipliedLast; #else int bitmapInfo = kCGImageAlphaPremultipliedLast; #endif //第一步 先把图片缩小 加快计算速度. 但越小结果误差可能越大 CGSize thumbSize=CGSizeMake(50, 50); CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGContextRef context = CGBitmapContextCreate(NULL, thumbSize.width, thumbSize.height, 8,//bits per component thumbSize.width*4, colorSpace, bitmapInfo); CGRect drawRect = CGRectMake(0, 0, thumbSize.width, thumbSize.height); CGContextDrawImage(context, drawRect, self.CGImage); CGColorSpaceRelease(colorSpace); //第二步 取每个点的像素值 unsigned char* data = CGBitmapContextGetData (context); if (data == NULL) return nil; NSCountedSet *cls=[NSCountedSet setWithCapacity:thumbSize.width*thumbSize.height]; for (int x=0; x<thumbSize.width; x++) { for (int y=0; y<thumbSize.height; y++) { int offset = 4*(x*y); int red = data[offset]; int green = data[offset+1]; int blue = data[offset+2]; int alpha = data[offset+3]; NSArray *clr=@[@(red),@(green),@(blue),@(alpha)]; [cls addObject:clr]; } } CGContextRelease(context); //第三步 找到出现次数最多的那个颜色 NSEnumerator *enumerator = [cls objectEnumerator]; NSArray *curColor = nil; NSArray *MaxColor=nil; NSUInteger MaxCount=0; while ( (curColor = [enumerator nextObject]) != nil ) { NSUInteger tmpCount = [cls countForObject:curColor]; if ( tmpCount < MaxCount ) continue; MaxCount=tmpCount; MaxColor=curColor; } return [UIColor colorWithRed:([MaxColor[0] intValue]/255.0f) green:([MaxColor[1] intValue]/255.0f) blue:([MaxColor[2] intValue]/255.0f) alpha:([MaxColor[3] intValue]/255.0f)]; }