- (NSArray*)getRGBAsFromImage:(UIImage*)image atX:(
int)x andY:(
int)y count:(
int)count
{
NSMutableArray *result =
[[NSMutableArray alloc] initWithCapacity:count];
// First get the image into your data buffer
CGImageRef imageRef =
[image CGImage];
NSUInteger width =
CGImageGetWidth(imageRef);
NSUInteger height =
CGImageGetHeight(imageRef);
CGColorSpaceRef colorSpace =
CGColorSpaceCreateDeviceRGB();
unsigned char *rawData = (unsigned
char*) calloc(height * width *
4,
sizeof(unsigned
char));
NSUInteger bytesPerPixel =
4;
NSUInteger bytesPerRow = bytesPerPixel *
width;
NSUInteger bitsPerComponent =
8;
CGContextRef context =
CGBitmapContextCreate(rawData, width, height,
bitsPerComponent, bytesPerRow, colorSpace,
kCGImageAlphaPremultipliedLast |
kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
CGContextDrawImage(context, CGRectMake(0,
0, width, height), imageRef);
CGContextRelease(context);
// Now your rawData contains the image data in the RGBA8888 pixel format.
NSUInteger byteIndex = (bytesPerRow * y) + x *
bytesPerPixel;
for (
int i =
0 ; i < count ; ++
i)
{
CGFloat alpha = ((CGFloat) rawData[byteIndex +
3] ) /
255.0f;
CGFloat red = ((CGFloat) rawData[byteIndex] ) /
alpha;
CGFloat green = ((CGFloat) rawData[byteIndex +
1] ) /
alpha;
CGFloat blue = ((CGFloat) rawData[byteIndex +
2] ) /
alpha;
byteIndex +=
bytesPerPixel;
UIColor *acolor =
[UIColor colorWithRed:red green:green blue:blue alpha:alpha];
[result addObject:acolor];
}
free(rawData);
return result;
}
http://stackoverflow.com/questions/448125/how-to-get-pixel-data-from-a-uiimage-cocoa-touch-or-cgimage-core-graphics
__block NSString *leftStr = @"FirstLeft";
NSString *centrStr = @"FirstCenter";
NSString* (^myBlock)(NSString *) = ^(NSString *lastStr){
return [leftStr stringByAppendingString:[NSString stringWithFormat:@", %@, %@", centrStr, lastStr]];
};
NSLog(@"%@", myBlock(@"last"));
leftStr = @"ThenLeft";
centrStr = @"ThenCenter";
NSLog(@"%@", myBlock(@"right"));
转载于:https://www.cnblogs.com/wly314/p/5354532.html