How to get the pixel color on touch?

后端 未结 5 2166
闹比i
闹比i 2020-11-27 02:28

I know this is a common question and there are a lot of answers of this question. I\'ve used some of this. Although many of them are the same. But the sad thing for me is th

5条回答
  •  青春惊慌失措
    2020-11-27 03:22

    This is the one I've used, and it looks simpler than the methods you've tried.

    In my custom view class, I have this:

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
        UITouch *touch = [[event allTouches] anyObject];
        CGPoint loc = [touch locationInView:self];
        self.pickedColor = [self colorOfPoint:loc];
    }
    

    colorOfPoint is a method in a category on UIView, with this code:

    #import "UIView+ColorOfPoint.h"
    #import 
    
    @implementation UIView (ColorOfPoint)
    
    -(UIColor *) colorOfPoint:(CGPoint)point
        {
        unsigned char pixel[4] = {0};
        CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
        CGContextRef context = CGBitmapContextCreate(pixel,
                1, 1, 8, 4, colorSpace, (CGBitmapInfo)kCGImageAlphaPremultipliedLast);
    
        CGContextTranslateCTM(context, -point.x, -point.y);
    
        [self.layer renderInContext:context];
    
        CGContextRelease(context);
        CGColorSpaceRelease(colorSpace);
        UIColor *color = [UIColor colorWithRed:pixel[0]/255.0
            green:pixel[1]/255.0 blue:pixel[2]/255.0
            alpha:pixel[3]/255.0];
        return color;
        }
    

    Don't forget to import the category into the custom view class and add the QuartzCore framework.


    Trivial note for 2013: cast that last argument as (CGBitmapInfo) to avoid an implicit conversion warning: example here. Hope it helps.

提交回复
热议问题