[Swift]扩展UIImage :获取图片指定像素的颜色值

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/ 
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10647299.html 
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

对【UIImage】进行扩展

 1 import UIKit
 2  
 3 extension UIImage{
 4      
 5     /**
 6      根据坐标获取图片中的像素颜色值
 7      */
 8     subscript (x: Int, y: Int) -> UIColor? {
 9          
10         if x < 0 || x > Int(size.width) || y < 0 || y > Int(size.height) {
11             return nil
12         }
13          
14         let provider = self.cgImage!.dataProvider
15         let providerData = provider!.data
16         let data = CFDataGetBytePtr(providerData)
17          
18         let numberOfComponents = 4
19         let pixelData = ((Int(size.width) * y) + x) * numberOfComponents
20          
21         let r = CGFloat(data![pixelData]) / 255.0
22         let g = CGFloat(data![pixelData + 1]) / 255.0
23         let b = CGFloat(data![pixelData + 2]) / 255.0
24         let a = CGFloat(data![pixelData + 3]) / 255.0
25          
26         return UIColor(red: r, green: g, blue: b, alpha: a)
27     }
28 }

对【UIColor】进行扩展

 1 import UIKit
 2  
 3 extension UIColor {
 4      
 5     // Hex String -> UIColor
 6     convenience init(hexString: String) {
 7         let hexString = hexString.trimmingCharacters(in: .whitespacesAndNewlines)
 8         let scanner = Scanner(string: hexString)
 9          
10         if hexString.hasPrefix("#") {
11             scanner.scanLocation = 1
12         }
13          
14         var color: UInt32 = 0
15         scanner.scanHexInt32(&color)
16          
17         let mask = 0x000000FF
18         let r = Int(color >> 16) & mask
19         let g = Int(color >> 8) & mask
20         let b = Int(color) & mask
21          
22         let red   = CGFloat(r) / 255.0
23         let green = CGFloat(g) / 255.0
24         let blue  = CGFloat(b) / 255.0
25          
26         self.init(red: red, green: green, blue: blue, alpha: 1)
27     }
28      
29     // UIColor -> Hex String
30     var hexString: String? {
31         var red: CGFloat = 0
32         var green: CGFloat = 0
33         var blue: CGFloat = 0
34         var alpha: CGFloat = 0
35          
36         let multiplier = CGFloat(255.999999)
37          
38         guard self.getRed(&red, green: &green, blue: &blue, alpha: &alpha) else {
39             return nil
40         }
41          
42         if alpha == 1.0 {
43             return String(
44                 format: "#%02lX%02lX%02lX",
45                 Int(red * multiplier),
46                 Int(green * multiplier),
47                 Int(blue * multiplier)
48             )
49         }
50         else {
51             return String(
52                 format: "#%02lX%02lX%02lX%02lX",
53                 Int(red * multiplier),
54                 Int(green * multiplier),
55                 Int(blue * multiplier),
56                 Int(alpha * multiplier)
57             )
58         }
59     }
60 }

测试示例:

 1 // 获取图片
 2 let image = UIImage(named: "img")!
 3 let width = Int(image.size.width)
 4 let height = Int(image.size.height)
 5 print("图片尺寸:", "\(width) * \(height)")
 6          
 7 // 获取指定像素颜色
 8 if let hexString = image[0, 0]?.hexString {
 9     print("左上角颜色:", hexString)
10 }
11 if let hexString = image[width, 0]?.hexString {
12     print("右上角颜色:", hexString)
13 }
14 if let hexString = image[width/2, height/2]?.hexString {
15     print("中间点颜色:", hexString)
16 }

 

转载于:https://www.cnblogs.com/strengthen/p/10647299.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值