How to get the pixel color on touch?

后端 未结 5 2152
闹比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:04

    Thank you for @Aggressor's post the code above

    Swift 2.1

    func getPixelColorAtPoint(point:CGPoint) -> UIColor{
    
       let pixel = UnsafeMutablePointer.alloc(4)
       let colorSpace = CGColorSpaceCreateDeviceRGB()
       let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.PremultipliedLast.rawValue)
       let context = CGBitmapContextCreate(pixel, 1, 1, 8, 4, colorSpace, bitmapInfo.rawValue)
    
       CGContextTranslateCTM(context, -point.x, -point.y)
       view.layer.renderInContext(context!)
       let color:UIColor = UIColor(red: CGFloat(pixel[0])/255.0, green: CGFloat(pixel[1])/255.0, blue: CGFloat(pixel[2])/255.0, alpha: CGFloat(pixel[3])/255.0)
    
       pixel.dealloc(4)
       return color
    }
    

    Swift 3, Xcode Version 8.2 (8C38) and Swift 4, Xcode Version 9.1 (9B55)

     func getPixelColorAtPoint(point:CGPoint, sourceView: UIView) -> UIColor{
    
        let pixel = UnsafeMutablePointer.allocate(capacity: 4)
        let colorSpace = CGColorSpaceCreateDeviceRGB()
        let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedLast.rawValue)
        let context = CGContext(data: pixel, width: 1, height: 1, bitsPerComponent: 8, bytesPerRow: 4, space: colorSpace, bitmapInfo: bitmapInfo.rawValue)
        var color: UIColor? = nil
    
        if let context = context {
            context.translateBy(x: -point.x, y: -point.y)
            sourceView.layer.render(in: context)
    
            color = UIColor(red: CGFloat(pixel[0])/255.0,
                            green: CGFloat(pixel[1])/255.0,
                            blue: CGFloat(pixel[2])/255.0,
                            alpha: CGFloat(pixel[3])/255.0)
    
            pixel.deallocate(capacity: 4)
        }
        return color
    }
    

提交回复
热议问题