1. cifilter:乙個可變的物件代表乙個影響。乙個濾波物件至少有乙個輸入引數並且產生乙個輸出。
3. cicontext:coreimage通過這個物件將濾波產生的結果畫出來。乙個core image上下文可以基於cpu或者是gpu。
overview
使用core image時需要在專案中加入框架coreimage.framework。並且在原始檔中引入相應的標頭檔案.
listing 1-1 在乙個上應用濾波的基本步驟
1. 建立乙個cicontext物件。
2. 建立乙個ciimage物件。
3. 建立乙個濾波物件並設定它的輸入引數。
4. 獲得輸出。這個輸出是怎樣產生的乙個方案。並沒有被渲染。
5. 渲染ciimage為乙個core graphics,來準備展示或者儲存到檔案。
note:一些core image濾波生成無限大的,例如在cicategorytileeffect目錄中的那些filters.在這種情況下,在渲染之前要不需要裁剪,要不指定乙個有限大小的矩形。
建立乙個coreimage context
為了渲染,需要建立乙個core image context,然後使用這個上下文來繪製輸出。乙個上下文代表乙個繪製目的地。這個目的地決定core image使用gpu還是cpu來渲染。下面的**指明指定平台的不同方法來渲染。
建立乙個coreimage context當你不需要實時的效能
cicontext *context = [cicontextcontextwithoptions:nil];
這個方法可以使用gpu,也可以使用cpu進行渲染。指明使用哪個,可以提供乙個options字典,增加關鍵字kcicontextusesoftwarerender,並使用合適的布林值賦值。cpu比gpu渲染要慢。但是在gpu渲染時,結果只有當被拷貝到cpu記憶體並且轉換為例如uiimage這種型別才會被展示出來。
建立乙個coreimage context當需要實時的效能
eaglcontext*myeaglcontext = [[eaglcontext alloc] initwithapi:keaglrenderingapiopengles2]
然後使用方法contextwitheaglcontext:建立乙個cicontext物件。
nsdictionary*options = @;
cicontext*mycontext = [cicontext contextwitheaglcontext:myeaglcontext options:options];
建立乙個ciimage物件
core image filter處理core image 。以下**列出了建立ciimage物件的方法。你使用的方法依賴於源。記住ciimage物件是乙個真正的的recipe。core image不會真正的產生任何畫素直到被呼叫到目的地去渲染結果
建立乙個濾波物件並且設定值
filterwithname:方法建立乙個型別為指定名字引數的濾波器。名字引數是乙個字串,這個值必須匹配內建濾波器的名字。可以在core image filter reference中找到所有的內建濾波器。
在ios中,當呼叫filterwithname:方法時,乙個濾波器的輸入值會被設定成預設值。
hueadjust = [cifilterfilterwithname:@」cihueadjust」];
//這個濾波器有兩個引數,乙個是輸入,乙個是輸入角度
[hueadjustsetvalue:myciimage forkey:kciinputimagekey];
[hueadjustsetvalue:@2.094f forkey:kciinputanglekey];
有乙個更緊湊的方式建立濾波器並且設定值:
hueadjust=[cifilter filterwithname:@」cihueadjust」
withinputparameters:@];
獲得輸出
通過檢索outputimage的值來獲得輸出。
ciimage *result =[hueadjust valueforkey:kcioutputimagekey];
core image不會做任何處理直到呼叫真正的渲染方法時才會處理。當你請求乙個輸出,core image收集產生乙個輸出的計算結果並且儲存這些計算結果(這就是所謂的recipe)在乙個ciimage物件中。
推遲處理直到渲染時間是的core image快並且高效。在渲染的時候,core image可以看到是否有多個濾波器被應用在一張上。如果是這樣,它會自動連線多個recipes到乙個操作中,也就說乙個畫素僅處理一次。而且還會自動權衡應用濾波的順序來使得處理更高效(比如顏色調整和大小調整,相反順序處理起來會更加高效)。
渲染輸出
保持執行緒安全
連鎖濾波
result是list1-1中得到的輸出,此時作為新的濾波器的輸入。在ios中可以不用寫1處的**,因為當設定濾波時會自動設定,在osx系統中需要顯示設定。
應用乙個濾波到video
core image和core video可以一起工作完成很多效果。以下步驟可以應用乙個濾波到video使用core video在osx上。
1. 使用nsview的子類建立乙個video的view
2. 當你用一幀初始化乙個view時,可以建立乙個cifilter物件並且設定預設值
3. 設定濾波器的輸入引數,除了輸入
4. 每次渲染一幀時,你需要設定輸入並且繪製輸出。你的rendercurrentframe方法如下。為避免篡改,在繪製輸出時,這個例子使用完整的座標系
使用轉換效果
轉換被典型的使用在滑動展示或者在video中從乙個場景切換到另乙個場景。這些效果需要每次渲染,所以需要設定乙個定時器。這一部分的內容主要介紹如何設定乙個定時器。你將學會如何通過設定並應用cicopymachine濾波到兩個靜態的上來做這件事情。轉換濾波需要以下任務:
1. 建立ciimage物件。
2. 設定並安排乙個定時器。
3. 建立乙個cicontext物件
4. 建立乙個cifilter物件。
5. 在osx上,需要為濾波器設定預設值。(ios不需要)
6. 設定濾波器的引數
7. 設定需要處理的源和目標
8. 計算時間
9. 應用濾波
10. 繪製結果
11. 重複8-10,直到轉換完成。
awakefromnib方法,獲得兩個並且把他們設定成源和目的。使用nstimer類,設定每1/30分鐘重複。注意變數thumbnailwidth和thumbnailheight,用來限制渲染到view
設定轉換濾波器
drawrect方法設定乙個與檢視大小相等的矩形。並且設定乙個浮點數作為渲染時間。
函式流程設定inputtime值傳遞給這個方法。它應用轉換,傳遞從轉換到crop 濾波,crop可以保證輸出適合檢視大小。函式返回擷取後的轉換給drawrect函式繪製。
每當時間到時,檢視展示應該被更新
使用CoreImage教程
使用coreimage教程 coreimage包含有很多實用的濾鏡,專業處理的庫,為了能看到各種渲染效果,請使用如下素材.現在可以開始教程了 固定的寬度 uiimage fiximagewidth uiimage image,cgfloat width 片段 將uiimage轉換成ciimage 建...
iOS人臉識別 CoreImage
1 從初始uiimage獲取乙個ciimage物件。2 建立乙個用於分析物件的cicontext。3 通過type和options引數建立乙個cidetector例項。type引數指定了要識別的特徵型別。options引數可以設定識別特徵的精確度,低精確度速度快,高精確度更準確。4 建立乙個影象陣列...
CoreImage框架基本應用
ciimage.這個類儲存影象資料。它可以從uiimage 影象檔案 或者是畫素資料中構造出來。cifilter.濾鏡類包含乙個字典結構,對各種濾鏡定義了屬於他們各自的屬性。濾鏡有很多種,比如鮮豔程度濾鏡,色彩反轉濾鏡,剪裁濾鏡等等。把uiimage轉換成濾鏡可以操作的ciimage ciimage...