iOS:循环播放图像的像素

我有两个相同的格式和大小的图像。

我想遍历每个图像的像素,find最左上angular和右上angular的差异坐标。

差值被认为是具有相同坐标的两个像素的像素颜色。

你能给我提供一个示例代码循环通过图像像素,并获取其颜色值?

这适用于我(这是使用ARC):

- (BOOL) pointInside: (CGPoint) point withEvent: (UIEvent *) event { CGRect r = CGRectZero ; r.size =[self size] ; CGFloat red ; CGFloat green ; CGFloat blue ; CGFloat alpha ; if (point.x < 0 || point.x > r.size.width || point.y < 0 || point.y > r.size.height) { return NO ; } [inspector colorAt:point red:&red green:&green blue:&blue alpha:&alpha] ; return alpha > 0.01f ; } 

这是神奇的:)

 // CGImageInspection.h #import <Foundation/Foundation.h> @interface CGImageInspection : NSObject + (CGImageInspection *) imageInspectionWithCGImage: (CGImageRef) imageRef ; - (void) colorAt: (CGPoint) location red: (CGFloat *) red green: (CGFloat *) green blue: (CGFloat *) blue alpha: (CGFloat *) alpha ; @end 

和相应的执行:

 // CGImageInspection.mm @interface CGImageInspection () - (id) initWithCGImage: (CGImageRef) imageRef ; @property (assign, nonatomic) CGContextRef context ; @property (assign, nonatomic) void * pixels ; @property (assign, nonatomic) NSUInteger bytesPerRow ; @property (assign, nonatomic) NSUInteger bytesPerPixel ; @end @implementation CGImageInspection @synthesize context ; @synthesize pixels ; @synthesize bytesPerRow ; @synthesize bytesPerPixel ; - (void) dealloc { if (self.context) { ::CGContextRelease(self.context) ; self.context = 0 ; } if (self.pixels) { ::free(self.pixels) ; self.pixels = 0 ; } ::NSLog(@"CGImageInspection going away") ; } + (CGImageInspection *) imageInspectionWithCGImage: (CGImageRef) imageRef { return [[CGImageInspection alloc] initWithCGImage:imageRef] ; } - (id) initWithCGImage: (CGImageRef) imageRef { if (self = [super init]) { size_t pixelsWide = ::CGImageGetWidth(imageRef) ; size_t pixelsHigh = ::CGImageGetHeight(imageRef) ; self.bytesPerPixel = 4 ; self.bytesPerRow = (pixelsWide * self.bytesPerPixel) ; int bitmapByteCount = (self.bytesPerRow * pixelsHigh) ; CGColorSpaceRef colorSpace= ::CGColorSpaceCreateDeviceRGB() ; if (colorSpace == 0) { return nil ; } self.pixels = ::calloc(bitmapByteCount, 1) ; if (self.pixels == 0) { ::CGColorSpaceRelease(colorSpace) ; return nil ; } self.context = ::CGBitmapContextCreate( self.pixels , pixelsWide , pixelsHigh , 8 // bits per component , self.bytesPerRow , colorSpace , kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big) ; if (self.context == 0) { ::free(self.pixels) ; self.pixels = 0 ; ::CGColorSpaceRelease(colorSpace) ; return nil ; } ::CGContextDrawImage(context, (CGRect) {{0, 0}, {pixelsWide, pixelsHigh}}, imageRef) ; ::CGColorSpaceRelease(colorSpace) ; } return self ; } - (void) colorAt: (CGPoint) location red: (CGFloat *) red green: (CGFloat *) green blue: (CGFloat *) blue alpha: (CGFloat *) alpha { int yy = (int) location.y ; int xx = (int) location.x ; int byteIndex = (bytesPerRow * yy) + xx * bytesPerPixel ; unsigned char * raw = (unsigned char *) self.pixels ; raw += byteIndex ; *red = ((CGFloat) (*raw++)) / 255.0f ; *green = ((CGFloat) (*raw++)) / 255.0f ; *blue = ((CGFloat) (*raw++)) / 255.0f ; *alpha = ((CGFloat) (*raw++)) / 255.0f ; } @end 

希望这可以帮助。

我认为你是低调的,因为你一定不清楚,不知道,也许你做了,你的google-fu今天不工作。 我知道我有这样的日子!

无论如何, 如何获得在iphone上的图像像素的RGB值应该可以帮助你。