iOS 获取图片某一点的颜色对象 (UIColor *)

# XPXRefresh

``

@interfaceUIImage (ColorAtPixel)

- (UIColor*)colorAtPixel:(CGPoint)point;

@end

#import

#import"UIImage+ColorAtPixel.h"

@implementationUIImage (ColorAtPixel)

- (UIColor*)colorAtPixel:(CGPoint)point {

// Cancel if point is outside image coordinates

if(!CGRectContainsPoint(CGRectMake(0.0f,0.0f,self.size.width,self.size.height), point)) {

returnnil;

}

NSInteger pointX = trunc(point.x);

NSInteger pointY = trunc(point.y);

CGImageRef cgImage =self.CGImage;

NSUInteger width =self.size.width;

NSUInteger height =self.size.height;

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();

intbytesPerPixel =4;

intbytesPerRow =bytesPerPixel*1;

NSUInteger bitsPerComponent =8;

unsignedcharpixelData[4] = {0,0,0,0};

CGContextRef context = CGBitmapContextCreate(pixelData,

1,

1,

bitsPerComponent,

bytesPerRow,

colorSpace,

kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);

CGColorSpaceRelease(colorSpace);

CGContextSetBlendMode(context, kCGBlendModeCopy);

// Draw the pixel we are interested in onto the bitmap context

CGContextTranslateCTM(context, -pointX, pointY-(CGFloat)height);

CGContextDrawImage(context, CGRectMake(0.0f,0.0f, (CGFloat)width, (CGFloat)height), cgImage);

CGContextRelease(context);

// Convert color values [0..255] to floats [0.0..1.0]

CGFloat red= (CGFloat)pixelData[0] /255.0f;

CGFloat green = (CGFloat)pixelData[1] /255.0f;

CGFloat blue= (CGFloat)pixelData[2] /255.0f;

CGFloat alpha = (CGFloat)pixelData[3] /255.0f;

return[UIColorcolorWithRed:redgreen:greenblue:bluealpha:alpha];

}

@end

``

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容