Reputation: 519
I am developing an iOS App that needs to recognize colors and other stuff. I got this code:
- (UIColor *)averageColor {
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
unsigned char rgba[4];
CGContextRef context = CGBitmapContextCreate(rgba, 1, 1, 8, 4, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGContextDrawImage(context, CGRectMake(0, 0, 1, 1), self.CGImage);
CGColorSpaceRelease(colorSpace);
CGContextRelease(context);
if(rgba[3] > 0) {
CGFloat alpha = ((CGFloat)rgba[3])/255.0;
CGFloat multiplier = alpha/255.0;
return [UIColor colorWithRed:((CGFloat)rgba[0])*multiplier
green:((CGFloat)rgba[1])*multiplier
blue:((CGFloat)rgba[2])*multiplier
alpha:alpha];
}
else {
return [UIColor colorWithRed:((CGFloat)rgba[0])/255.0
green:((CGFloat)rgba[1])/255.0
blue:((CGFloat)rgba[2])/255.0
alpha:((CGFloat)rgba[3])/255.0];
}
}
from this guy: Link
It's 99% perfect, except from this line:
CGContextDrawImage(context, CGRectMake(0, 0, 1, 1), self.CGImage);
In which I get the following error message:
Property 'CGImage' not found on object of type 'MyClass *'
As far as I know, the CGImage is part of the CoreImage
Framework, which is correctly added on the project, and (I believe so) correctly imported in the class. Check out my imports.
#import "MyClass.h"
#import "TiUtils.h"
#import "TiViewProxy.h"
#import <TitaniumKit/TiBlob.h>
#import <QuartzCore/QuartzCore.h>
#import <UIKit/UIKit.h>
#import <CoreImage/CIImage.h>
Please, what is wrong? What can I do for the error to go away? Thanks in advance!
Upvotes: 1
Views: 390
Reputation: 17372
The code is (most likely) a category (in Swift nomenclature 'extension' ) on UIImage
.
Technically it would work on anything that responded to the selector CGImage
.
The full declaration should be something like:
UIImage + ColorHelp.h
@interface UIImage (ColorHelp)
- (UIColor *)averageColor;
@end
UIImage + ColorHelp.m
@implementation UIImage (ColorHelp)
- (UIColor *)averageColor {
//stuff
}
@end
Create a new "Objective-C File" in Xcode to create a template category on UIImage
.
Fromm there all instances of UIImage
will respond to average color. e.g
UIImage *myImage = <something>;
UIColor *averageColor = [myImage averageColor];
Upvotes: 1