Skip to content

Instantly share code, notes, and snippets.

@elpsk
Created May 15, 2014 20:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save elpsk/f1c2760e9269b00fdb1b to your computer and use it in GitHub Desktop.
Save elpsk/f1c2760e9269b00fdb1b to your computer and use it in GitHub Desktop.
- (UIColor *)averageColor
{
CGImageRef rawImageRef = [self CGImage];
CFDataRef data = CGDataProviderCopyData(CGImageGetDataProvider(rawImageRef));
const UInt8 *rawPixelData = CFDataGetBytePtr(data);
NSUInteger imageHeight = CGImageGetHeight(rawImageRef);
NSUInteger imageWidth = CGImageGetWidth(rawImageRef);
NSUInteger bytesPerRow = CGImageGetBytesPerRow(rawImageRef);
NSUInteger stride = CGImageGetBitsPerPixel(rawImageRef) / 8;
unsigned int red = 0;
unsigned int green = 0;
unsigned int blue = 0;
for (int row = 0; row < imageHeight; row++) {
const UInt8 *rowPtr = rawPixelData + bytesPerRow * row;
for (int column = 0; column < imageWidth; column++) {
red += rowPtr[0];
green += rowPtr[1];
blue += rowPtr[2];
rowPtr += stride;
}
}
CFRelease(data);
CGFloat f = 1.0f / (255.0f * imageWidth * imageHeight);
return [UIColor colorWithRed:f * red green:f * green blue:f * blue alpha:1];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment