为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕尼黑5688855 2019-07-29 16:16:18
如何获取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


查看完整回答
反对 回复 2019-07-29
?
慕村9548890

TA贡献1884条经验 获得超4个赞

您无法直接访问UIImage的位图数据。

您需要获取UIImage的CGImage表示。然后从位图的CFData表示中获取CGImage的数据提供程序。确保在完成后释放CFData。

CGImageRef cgImage = [image CGImage];CGDataProviderRef provider = CGImageGetDataProvider(cgImage);CFDataRef bitmapData = CGDataProviderCopyData(provider);

您可能希望查看CGImage的位图信息以获取像素顺序,图像尺寸等。


查看完整回答
反对 回复 2019-07-29
  • 3 回答
  • 0 关注
  • 1047 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信