iOS-CoreImage简单使用
CoreImage是一個圖像框架,它基于OpenGL頂層創建,底層則用著色器來處理圖像,這意味著它利用了GPU基于硬件加速來處理圖像。 CoreImage中有很多濾鏡,它們能夠一次給予一張圖像或者視頻幀多種視覺效果。而且濾鏡可以連接起來組成一個濾鏡鏈,把濾鏡效果疊加起來處理圖像。
CoreImage框架最常用的類:
* CIImage
保存圖像數據的類,可以通過UIImage,圖像文件或者像素數據來創建,包括未處理的像素數據如:
- imageWithCVPixelBuffer:
- imageWithData:
方法等等。
也可以通過圖像數據類比如UIImage,CGImageRef等等。
* CIFilter
濾鏡類,這個框架中對圖片屬性進行細節處理的類。它對所有的像素進行操作,用一些鍵-值設置來決定具體操作的程度。
* CIContext
上下文類,如CoreGraphics以及CoreData中的上下文用于處理繪制渲染以及處理托管對象一樣,CoreImage的上下文也是實現對圖像處理的具體對象。
這里需要注意的是在Context創建的時候,我們需要給它設定為是基于GPU還是CPU。(這里使用GPU)
基于GPU的話,處理速度更快,因為利用了GPU硬件的并行優勢。但是GPU受限于硬件紋理尺寸,而且如果你的程序在后臺繼續處理和保存圖片的話,那么需要使用CPU,因為當app切換到后臺狀態時GPU處理會被打斷。
?
使用步驟:
0.導入CIImage圖片
1.創建出Filter濾鏡
CIFilter?*filterOne?=?[CIFilter?filterWithName:@"CIPixellate"];????[filterOne?setValue:ciImage?forKey:kCIInputImageKey];
????[filterOne?setDefaults];
????CIImage?*outImage?=?[filterOne?valueForKey:kCIOutputImageKey];
2.用CIContext將濾鏡中的圖片渲染出來
CIContext?*context?=?[CIContext?contextWithOptions:nil];????
????CGImageRef?cgImage?=?[context?createCGImage:outImage?fromRect:[outImage?extent]];
3.導出圖片
UIImage?*showImage?=?[UIImage?imageWithCGImage:cgImage];????CGImageRelease(cgImage);
4.加載圖片
_image.image?=?showImage;?
?如果要使用組合濾鏡
在步驟1中設置組合濾鏡,只需要將上一個濾鏡的輸出變為下一個濾鏡的輸入就行了
//第一個濾鏡????CIFilter?*filterOne?=?[CIFilter?filterWithName:@"CIPixellate"];
????[filterOne?setValue:ciImage?forKey:kCIInputImageKey];
????[filterOne?setDefaults];
????CIImage?*outImage?=?[filterOne?valueForKey:kCIOutputImageKey];
????//第二個濾鏡
????CIFilter?*filterTwo?=?[CIFilter?filterWithName:@"CIHueAdjust"];
????[filterTwo?setValue:outImage?forKey:kCIInputImageKey];
????[filterTwo?setDefaults];
????[filterTwo?setValue:@(1.f)?forKey:kCIInputAngleKey];
????CIImage?*outputImage?=?[filterTwo?valueForKey:kCIOutputImageKey];
?記住渲染的時候,步驟2,要將最后輸出的CIImage傳入
?
CIContext?*context?=?[CIContext?contextWithOptions:nil];????
????CGImageRef?cgImage?=?[context?createCGImage:outputImage?fromRect:[outImage?extent]];
轉載于:https://www.cnblogs.com/hxwj/p/4663225.html
總結
以上是生活随笔為你收集整理的iOS-CoreImage简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux awk命令详解,使用syst
- 下一篇: SQL Server表分区的NULL值问