日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

iOS-CoreImage简单使用

發(fā)布時間:2025/5/22 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS-CoreImage简单使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

CoreImage是一個圖像框架,它基于OpenGL頂層創(chuàng)建,底層則用著色器來處理圖像,這意味著它利用了GPU基于硬件加速來處理圖像。 CoreImage中有很多濾鏡,它們能夠一次給予一張圖像或者視頻幀多種視覺效果。而且濾鏡可以連接起來組成一個濾鏡鏈,把濾鏡效果疊加起來處理圖像。

CoreImage框架最常用的類:


* CIImage

保存圖像數(shù)據(jù)的類,可以通過UIImage,圖像文件或者像素數(shù)據(jù)來創(chuàng)建,包括未處理的像素數(shù)據(jù)如:

- imageWithCVPixelBuffer:

- imageWithData:

方法等等。

也可以通過圖像數(shù)據(jù)類比如UIImage,CGImageRef等等。


* CIFilter

濾鏡類,這個框架中對圖片屬性進(jìn)行細(xì)節(jié)處理的類。它對所有的像素進(jìn)行操作,用一些鍵-值設(shè)置來決定具體操作的程度。


* CIContext

上下文類,如CoreGraphics以及CoreData中的上下文用于處理繪制渲染以及處理托管對象一樣,CoreImage的上下文也是實現(xiàn)對圖像處理的具體對象。

這里需要注意的是在Context創(chuàng)建的時候,我們需要給它設(shè)定為是基于GPU還是CPU。(這里使用GPU)

基于GPU的話,處理速度更快,因為利用了GPU硬件的并行優(yōu)勢。但是GPU受限于硬件紋理尺寸,而且如果你的程序在后臺繼續(xù)處理和保存圖片的話,那么需要使用CPU,因為當(dāng)app切換到后臺狀態(tài)時GPU處理會被打斷。

?

使用步驟:

0.導(dǎo)入CIImage圖片

CIImage?*ciImage?=?[[CIImage?alloc]initWithImage:[UIImage?imageNamed:@"test.jpg"]];

1.創(chuàng)建出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.導(dǎo)出圖片

UIImage?*showImage?=?[UIImage?imageWithCGImage:cgImage];
????CGImageRelease(cgImage);

4.加載圖片

_image.image?=?showImage;

?

?如果要使用組合濾鏡

在步驟1中設(shè)置組合濾鏡,只需要將上一個濾鏡的輸出變?yōu)橄乱粋€濾鏡的輸入就行了

//第一個濾鏡
????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]];

轉(zhuǎn)載于:https://www.cnblogs.com/hxwj/p/4663225.html

總結(jié)

以上是生活随笔為你收集整理的iOS-CoreImage简单使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。