2012-12-28 37 views
1

我在我的應用中使用了一堆CIFilter過濾器來調整亮度,飽和度等,它們工作正常。我遇到了一些與inputSharpness有關的問題。如果我觸摸銳度滑塊,圖片就會消失。相關代碼:無法在UIImage上應用inputSharpness

UIImage *aUIImage = [imageView image]; 
CGImageRef aCGImage = aUIImage.CGImage; 
aCIImage = [CIImage imageWithCGImage:aCGImage]; 

//Create context 
context = [CIContext contextWithOptions:nil]; 
sharpFilter = [CIFilter filterWithName:@"CIAttributeTypeScalar" keysAndValues: @"inputImage", aCIImage, nil]; 

....

- (IBAction)sharpSliderChanged:(id)sender 
{ 

    //Set filter value 
    [sharpFilter setValue:[NSNumber numberWithFloat:sharpSlider.value] forKey:@"inputSharpness"]; 

    //Convert CIImage to UIImage 
    outputImage = [sharpFilter outputImage]; 
    CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]]; 
    newUIImage = [UIImage imageWithCGImage:cgimg]; 
    CGImageRelease(cgimg); 

    //add image to imageView 
    [imageView setImage:newUIImage]; 

} 
+0

你是否檢查過你的outputImage是否爲零? – tiguero

+0

圖像不是零,但是當我調試代碼時,我看到'sharpFilter \t CIFilter * 0x00000000'因此,尖銳的過濾器定義可能有些問題。 – Segev

+0

你保留sharpFilter嗎? – tiguero

回答

1

我讀過一個類似的問題後,還有一個可能的解決方案是增加一個類別要提供UIImage的效果。唯一的區別是您應該使用CIColorControls參數之一:inputSharpnessCISharpenLuminance過濾器。

回到你的問題:從你的評論看來,你對如何初始化你的過濾器有一些問題。我看看official documentation,我會在初始化階段使用CISharpenLuminance。它只在iOS 6中可用。

編輯 就像我說的,如果你想堅持核心圖像,你想要的功能只能在iOS 6上使用。如果你想與ios 5兼容,我可以推薦你使用第三方庫:GPU library from bradlarson。

+0

實際上那篇文章幫助我與其他過濾器。就像我上面所說的,我不會僅僅因爲這個小功能而將我的應用限制在ios 6上。它將ios 5最小化。經過大量閱讀後,我開始認爲ios 5沒有銳化過濾器。 – Segev