zoukankan      html  css  js  c++  java
  • [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 }
  • 相关阅读:
    [NOIP2010]引水入城
    [NOIP2009]靶形数独
    设计模式学习笔记——桥接模式(Bridge)
    BootStrap3.0学习--JavaScript 插件
    BootStrap3.0学习--组件
    BootStrap3.0学习--全局 CSS 样式
    BootStrap3.0学习--起步
    设计模式之第11章-建造者模式(Java实现)
    设计模式之第10章-桥接模式(Java实现)
    设计模式之第9章-原型模式(Java实现)
  • 原文地址:https://www.cnblogs.com/strengthen/p/10647299.html
Copyright © 2011-2022 走看看