美文网首页iOS常用OC-开发案例收集
iOS开发之获取图片上点的颜色值

iOS开发之获取图片上点的颜色值

作者: chasitu | 来源:发表于2021-01-07 11:29 被阅读0次

    时间有限我们就不多说,直接上代码,这里实现使用了分类,名称大家可以随意发挥

    获取图片上某个点的颜色值(不包含alpha)

    XXXXXXXX.h文件

    
    @interface UIImage (XXXXXXXX)
    
    /// 获取图片上某个点的RGB值(不包含alpha)。
    - (nullable NSArray<NSNumber *> *)pixelColorFromPoint:(CGPoint)point;
    
    @end
    

    XXXXXXXX.m文件

    @implementation UIImage (XXXXXXXX)
    
    /// 获取图片上某个点的颜色值(不包含alpha)。
    - (nullable NSArray<NSNumber *> *)pixelColorFromPoint:(CGPoint)point {
        // 判断点是否超出图像范围
        if (!CGRectContainsPoint(CGRectMake(0, 0, self.size.width, self.size.height), point)) return nil;
        
        // 将像素绘制到一个1×1像素字节数组和位图上下文。
        NSInteger pointX = trunc(point.x);
        NSInteger pointY = trunc(point.y);
        CGImageRef cgImage = self.CGImage;
        CGFloat width = self.size.width;
        CGFloat 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);
        
        // 将指定像素绘制到上下文中
        CGContextTranslateCTM(context, -pointX, pointY - height);
        CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, width, height), cgImage);
        CGContextRelease(context);
        
        CGFloat red = (CGFloat)pixelData[0];
        CGFloat green = (CGFloat)pixelData[1];
        CGFloat blue = (CGFloat)pixelData[2];
        return @[@(red), @(green), @(blue)];
    }
    @end
    

    收工

    相关文章

      网友评论

        本文标题:iOS开发之获取图片上点的颜色值

        本文链接:https://www.haomeiwen.com/subject/rifzoktx.html