- (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)) {

return nil;

}

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();

int bytesPerPixel =
4;

int bytesPerRow = bytesPerPixel *
1;

NSUInteger bitsPerComponent =
8;

unsigned char pixelData[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 [UIColor
colorWithRed:red green:green
blue:blue alpha:alpha];

}


UIImage+ColorAtPixel.h

#import <UIKit/UIKit.h>

/*
A category on UIImage that enables you to query the color value of arbitrary
pixels of the image.
*/
@interface UIImage (ColorAtPixel) - (UIColor *)colorAtPixel:(CGPoint)point; @end #import <CoreGraphics/CoreGraphics.h> #import "UIImage+ColorAtPixel.h" @implementation UIImage (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)) {
return nil;
} 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();
int bytesPerPixel = 4;
int bytesPerRow = bytesPerPixel * 1;
NSUInteger bitsPerComponent = 8;
unsigned char pixelData[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 [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
} @end

最新文章

  1. BZOJ 1391: [Ceoi2008]order [最小割]
  2. 几款主流PHP框架的优缺点评比
  3. python 类变量和实例变量
  4. ps, top, pstree
  5. sap 中怎样把非限制库存转为销售订单库存?
  6. POJ-1741 Tree (树上点分治)
  7. QTP10.0安装说明
  8. 【安卓】eclipse中不可错过的几个秘密、!
  9. vue系列之动态路由【原创】
  10. word20161229
  11. 五分钟让你读懂UML常见类图
  12. 从零开始学习html(十二)CSS布局模型——下
  13. Linux 远程和本地的一些解决方式
  14. eclipse从svn导入maven项目变成普通项目解决办法
  15. PO_从PO追溯PR的方式和表(分析)
  16. lnmp一键安装环境添加redis扩展及作为mysql的缓存
  17. zipkin:和springcloud集成过程记录
  18. HDU2048 神,上帝以及老天爷 错排
  19. 用squid做http/https正向代理
  20. Linux下编程学习一

热门文章

  1. CodeForces839D[莫比乌斯反演] Codeforces Round #428 (Div. 2)
  2. WIFI万能钥匙协议分析
  3. C#函数多返回值的方法
  4. Codevs 1148 == 洛谷 P1057 传球游戏
  5. C语言集锦(二) 图像显示 Windows和Linux
  6. 数据结构自己实现——queue
  7. AC日记——线段树练习5 codevs 4927
  8. 详解webpack-dev-server的配置属性
  9. 东方14ACM小组 15:Challenge 11
  10. NLP项目