充滿褐色調的復古風相片,是相片處理軟體最常使用的特效,現在只要透過 CoreImage Framework 中的 CIFilter -- CISepiaTone,你也可以輕鬆達成此效果。有關 CoreImage Framework 的 CIFilter 資訊,可以參考查閱目前在 iOS 上 CIFilter 能使用的濾鏡效果方法一文,文中會教你查詢在目前 iOS SDK 環境下所有可以使用的影像濾鏡。另外你也可以在本站的索引式搜索頁面中,查詢 Framework 分類下的 CoreImage 獲得更多此類資訊。
若要使用 CoreImage Framework 必須以手動的方式替專案新增 CoreImage.framework,並且引用對應的標頭檔。
以手動的方式替專案新增 Framework |
#import < CoreImage/CoreImage.h>
對於新增 Framework 有問題的讀者們,請參考 Xcode 4 新增 Framework 的方法一文。
在本示範中我們使用一個 UISlider 來對 CISepiaTone 的 Intensity 強度作設定,Intensity 的數值是介於 0 和 1 之間的浮點數,在我們在改變 UISlider 的數值時,才去呼叫自定的方法函式,將影像套用褐色調的濾鏡,其程式碼如下。
//改變UISlider的數值時會觸發的方法函式
- (IBAction)onChangedSepiaSlider:(UISlider *)sender {
//自定套用褐色調的的方法函式
[self setCISepiaToneWithIntensity:[sender value]];
}
- (void)setCISepiaToneWithIntensity:(CGFloat)intensity {
//製作CoreImage的CIImage存放待處理的影像資料
CIImage *inputImage = [[CIImage alloc] initWithImage:[UIImage imageNamed:@"mountain-lion.jpeg"]];
//製作CoreImage的CIFilter定義使用的影像濾鏡
CIFilter *sepiaFilter = [CIFilter filterWithName:@"CISepiaTone"
keysAndValues:kCIInputImageKey, inputImage,
@"inputIntensity", [NSNumber numberWithFloat:intensity],
nil];
//取得處理結果並且將CIImage轉換成UIImage
CIImage * coreImage = [sepiaFilter outputImage];
CIContext *context = [CIContext contextWithOptions:nil];
[imageView setImage:[UIImage imageWithCGImage:[context createCGImage:coreImage fromRect:coreImage.extent]]];
}
上述程式碼和大部分的 CIFilter 使用方法一樣,在宣告一個 CIFilter 之後就將待處理的 CIImage 餵給 CIFilter ,並且使用 Key Value 的方式來設定它的各項參數值,在參數設定方面,你可以參考上述程式碼直接使用 filterWithName: keysAndValues: 的方式來一次性的設定多種參數,或是直接使用 setValue: forKey: 針對單一參數做設定。
沒有留言:
張貼留言