如何获取iphone上图像上像素的RGB值我正在编写一个iPhone应用程序,并且需要在photoshop中实现与“eyedropper”工具相当的东西,在那里你可以触摸图像上的一个点并捕获相关像素的RGB值,以确定和匹配它的颜色。获取UIImage是一个简单的部分,但有没有办法将UIImage数据转换为位图表示,我可以在其中提取给定像素的信息?一个工作代码示例将是最受欢迎的,并注意我不关心alpha值。
3 回答
子衿沉夜
TA贡献1828条经验 获得超3个赞
这是我对UIImage采样颜色的解决方案。
此方法将请求的像素渲染为1px大型RGBA缓冲区,并将生成的颜色值作为UIColor对象返回。这比我见过的大多数其他方法快得多,并且只使用很少的内存。
对于像颜色选择器这样的东西,它应该可以很好地工作,在任何给定的时间你通常只需要一个特定像素的值。
的UIImage + Picker.h
#import <UIKit/UIKit.h>@interface UIImage (Picker)- (UIColor *)colorAtPosition:(CGPoint)position;@end
的UIImage + Picker.m
#import "UIImage+Picker.h"@implementation UIImage (Picker)- (UIColor *)colorAtPosition:(CGPoint)position { CGRect sourceRect = CGRectMake(position.x, position.y, 1.f, 1.f); CGImageRef imageRef = CGImageCreateWithImageInRect(self.CGImage, sourceRect); CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); unsigned char *buffer = malloc(4); CGBitmapInfo bitmapInfo = kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big; CGContextRef context = CGBitmapContextCreate(buffer, 1, 1, 8, 4, colorSpace, bitmapInfo); CGColorSpaceRelease(colorSpace); CGContextDrawImage(context, CGRectMake(0.f, 0.f, 1.f, 1.f), imageRef); CGImageRelease(imageRef); CGContextRelease(context); CGFloat r = buffer[0] / 255.f; CGFloat g = buffer[1] / 255.f; CGFloat b = buffer[2] / 255.f; CGFloat a = buffer[3] / 255.f; free(buffer); return [UIColor colorWithRed:r green:g blue:b alpha:a];}@end
慕村9548890
TA贡献1884条经验 获得超4个赞
您无法直接访问UIImage的位图数据。
您需要获取UIImage的CGImage表示。然后从位图的CFData表示中获取CGImage的数据提供程序。确保在完成后释放CFData。
CGImageRef cgImage = [image CGImage];CGDataProviderRef provider = CGImageGetDataProvider(cgImage);CFDataRef bitmapData = CGDataProviderCopyData(provider);
您可能希望查看CGImage的位图信息以获取像素顺序,图像尺寸等。
- 3 回答
- 0 关注
- 1047 浏览
添加回答
举报
0/150
提交
取消