本文将演示如何将图片转换为灰度图。
在项目导航区,打开视图控制器的代码文件【ViewController.swift】
1 import UIKit 2 3 class ViewController: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view, typically from a nib. 8 9 //从项目资源文件中读取一张图片 10 let image = UIImage(named: "Picture") 11 //调用灰度图转换方法,将图片转换为灰度图 12 let scaledImage = self.grayImage(image: image!) 13 14 //创建一个图像视图对象, 15 //并给图像视图对象,加载转换后的灰度图片 16 let imageView = UIImageView(image: scaledImage) 17 //然后设置图像视图的中心位置为(160,260) 18 imageView.center = CGPoint(x: 160, y: 260) 19 20 //将图像视图添加到当前视图控制器的根视图 21 self.view.addSubview(imageView) 22 } 23 24 //首先创建一个方法,传递一个图像参数, 25 //实现将图像转换为灰度图的功能 26 func grayImage(image:UIImage)->UIImage 27 { 28 //获得源图像的尺寸属性 29 let imageSize = image.size 30 //获得源图像的宽度数值 31 let width = Int(imageSize.width) 32 //获得源图像的高度数值 33 let height = Int(imageSize.height) 34 35 //创建灰度色彩空间对象,各种设备处理颜色的方式都不同, 36 //颜色必须有一个相关的色彩空间, 37 //否则,图形上下文将不知道如何解释相关的颜色值。 38 let spaceRef = CGColorSpaceCreateDeviceGray() 39 //参数1:指向要渲染的,绘制内存的地址。 40 //参数2:表示宽度 41 //参数3:表示高度 42 //参数4:表示内存中像素的每个组件的位数 43 //参数5:表示每一行,在内存中所占的比特数 44 //参数6:表示上下文使用的颜色空间 45 //参数7:表示是否包含alpha通道 46 let context = CGContext(data: nil, 47 width, 48 height: height, 49 bitsPerComponent: 8, 50 bytesPerRow: 0, 51 space: spaceRef, 52 bitmapInfo: CGBitmapInfo().rawValue)! 53 54 //然后创建一个和源图像同样尺寸的空间 55 let rect = CGRect(x: 0, y: 0, imageSize.width, height: imageSize.height) 56 //在灰度上下文中画入图片 57 context.draw(image.cgImage!, in: rect) 58 //从上下文中,获取并生成转为灰度的图片 59 let grayImage = UIImage(cgImage: context.makeImage()!) 60 61 //在方法的末尾,返回最终的灰度图片 62 return grayImage 63 } 64 65 override func didReceiveMemoryWarning() { 66 super.didReceiveMemoryWarning() 67 // Dispose of any resources that can be recreated. 68 } 69 }