如何获取iphone上图像上像素的RGB值

如何获取iphone上图像上像素的RGB值

我正在编写一个iPhone应用程序,并且需要在photoshop中实现与“eyedropper”工具相当的东西,在那里你可以触摸图像上的一个点并捕获相关像素的RGB值,以确定和匹配它的颜色。获取UIImage是一个简单的部分,但有没有办法将UIImage数据转换为位图表示,我可以在其中提取给定像素的信息?一个工作代码示例将是最受欢迎的,并注意我不关心alpha值。



慕尼黑5688855
浏览 1066回答 3
3回答

子衿沉夜

这是我对UIImage采样颜色的解决方案。此方法将请求的像素渲染为1px大型RGBA缓冲区,并将生成的颜色值作为UIColor对象返回。这比我见过的大多数其他方法快得多,并且只使用很少的内存。对于像颜色选择器这样的东西,它应该可以很好地工作,在任何给定的时间你通常只需要一个特定像素的值。的UIImage + Picker.h#import&nbsp;<UIKit/UIKit.h>@interface&nbsp;UIImage&nbsp;(Picker)-&nbsp;(UIColor&nbsp;*)colorAtPosition:(CGPoint)position;@end的UIImage + Picker.m#import&nbsp;"UIImage+Picker.h"@implementation&nbsp;UIImage&nbsp;(Picker)-&nbsp;(UIColor&nbsp;*)colorAtPosition:(CGPoint)position&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;CGRect&nbsp;sourceRect&nbsp;=&nbsp;CGRectMake(position.x,&nbsp;position.y,&nbsp;1.f,&nbsp;1.f); &nbsp;&nbsp;&nbsp;&nbsp;CGImageRef&nbsp;imageRef&nbsp;=&nbsp;CGImageCreateWithImageInRect(self.CGImage,&nbsp;sourceRect); &nbsp;&nbsp;&nbsp;&nbsp;CGColorSpaceRef&nbsp;colorSpace&nbsp;=&nbsp;CGColorSpaceCreateDeviceRGB(); &nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;*buffer&nbsp;=&nbsp;malloc(4); &nbsp;&nbsp;&nbsp;&nbsp;CGBitmapInfo&nbsp;bitmapInfo&nbsp;=&nbsp;kCGImageAlphaPremultipliedLast&nbsp;|&nbsp;kCGBitmapByteOrder32Big; &nbsp;&nbsp;&nbsp;&nbsp;CGContextRef&nbsp;context&nbsp;=&nbsp;CGBitmapContextCreate(buffer,&nbsp;1,&nbsp;1,&nbsp;8,&nbsp;4,&nbsp;colorSpace,&nbsp;bitmapInfo); &nbsp;&nbsp;&nbsp;&nbsp;CGColorSpaceRelease(colorSpace); &nbsp;&nbsp;&nbsp;&nbsp;CGContextDrawImage(context,&nbsp;CGRectMake(0.f,&nbsp;0.f,&nbsp;1.f,&nbsp;1.f),&nbsp;imageRef); &nbsp;&nbsp;&nbsp;&nbsp;CGImageRelease(imageRef); &nbsp;&nbsp;&nbsp;&nbsp;CGContextRelease(context); &nbsp;&nbsp;&nbsp;&nbsp;CGFloat&nbsp;r&nbsp;=&nbsp;buffer[0]&nbsp;/&nbsp;255.f; &nbsp;&nbsp;&nbsp;&nbsp;CGFloat&nbsp;g&nbsp;=&nbsp;buffer[1]&nbsp;/&nbsp;255.f; &nbsp;&nbsp;&nbsp;&nbsp;CGFloat&nbsp;b&nbsp;=&nbsp;buffer[2]&nbsp;/&nbsp;255.f; &nbsp;&nbsp;&nbsp;&nbsp;CGFloat&nbsp;a&nbsp;=&nbsp;buffer[3]&nbsp;/&nbsp;255.f; &nbsp;&nbsp;&nbsp;&nbsp;free(buffer); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;[UIColor&nbsp;colorWithRed:r&nbsp;green:g&nbsp;blue:b&nbsp;alpha:a];}@end

慕村9548890

您无法直接访问UIImage的位图数据。您需要获取UIImage的CGImage表示。然后从位图的CFData表示中获取CGImage的数据提供程序。确保在完成后释放CFData。CGImageRef&nbsp;cgImage&nbsp;=&nbsp;[image&nbsp;CGImage];CGDataProviderRef&nbsp;provider&nbsp;=&nbsp;CGImageGetDataProvider(cgImage);CFDataRef&nbsp;bitmapData&nbsp;=&nbsp;CGDataProviderCopyData(provider);您可能希望查看CGImage的位图信息以获取像素顺序,图像尺寸等。
打开App,查看更多内容
随时随地看视频慕课网APP