所謂顏色或灰度級指黑白顯示器中顯示像素點的亮暗差別,在彩色顯示器中表現為顏色的不同,灰度級越多,圖像層次越清楚逼真。灰度級取決于每個像素對應的刷新存儲單元的位數和顯示器本身的性能。如每個像素的顏色用16位二進制數表示,我們就叫它16位圖,它可以表達2的16次方即65536種顏色。如每一個像素采用24位二進制數表示,我們就叫它24位圖,它可以表達2的24次方即16777216種顏色.
灰度就是沒有色彩,RGB色彩分量全部相等。如果是一個二值灰度圖象,它的象素值只能為0或1,我們說它的灰度級為2。用個例子來說明吧:一個256級灰度的圖象,如果RGB三個量相同時,如:RGB(100,100,100)就代表灰度為100,RGB(50,50,50)代表灰度為50.
彩色圖象的灰度其實在轉化為黑白圖像后的像素值(是一種廣義的提法),轉化的方法看應用的領域而定,一般按加權的方法轉換,R, G,B 的比一般為3:6:1.
任何顏色都由紅、綠、藍三原色組成,假如原來某點的顏色為RGB(R,G,B),那么,我們可以通過下面幾種方法,將其轉換為灰度:
1.浮點算法:Gray=R0.3+G0.59+B0.11
2.整數方法:Gray=(R30+G59+B11)/100
3.移位方法:Gray =(R77+G151+B*28)>>8;
4.平均值法:Gray=(R+G+B)/3;
5.僅取綠色:Gray=G;
通過上述任一種方法求得Gray后,將原來的RGB(R,G,B)中的R,G,B統一用Gray替換,形成新的顏色RGB(Gray,Gray,Gray),用它替換原來的RGB(R,G,B)就是灰度圖了。
實現代碼:
<pre><code>` func grayImage() -> UIImage {
let imageRef:CGImage = self.cgImage!
let width:Int = imageRef.width
let height:Int = imageRef.height
let colorSpace:CGColorSpace = CGColorSpaceCreateDeviceGray()
let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.none.rawValue)
let context:CGContext = CGContext(data: nil, width: width, height: height, bitsPerComponent: 8, bytesPerRow: 0, space: colorSpace, bitmapInfo: bitmapInfo.rawValue)!
let rect:CGRect = CGRect.init(x: 0, y: 0, width: width, height: height)
context.draw(imageRef, in: rect)
let outPutImage:CGImage = context.makeImage()!
let newImage:UIImage = UIImage.init(cgImage: outPutImage, scale: self.scale, orientation: self.imageOrientation)
return newImage
}`</code></pre>
參考鏈接:http://blog.csdn.net/biyuhuaping/article/details/52151700