2012-12-07 44 views
1

我試圖創建一個Blured背景,當我展示彈出式功能時,我幾乎可以使其工作。MonoTouch從CIImage製作UIImage會導致無效參數/錯誤選擇器

我發現了一些我翻譯成C#的Objective C。

的問題是在這條線

UIImage finalImage = new UIImage(resultImage); 

希望這只是我做錯了

private UIView CreateBlurView(UIView view) 
    { 
     UIGraphics.BeginImageContext(view.Bounds.Size); 
     view.Layer.RenderInContext(UIGraphics.GetCurrentContext()); 
     UIImage viewImage = UIGraphics.GetImageFromCurrentImageContext(); 

     // Blur Image 
     CIImage imageToBlur = CIImage.FromCGImage(viewImage.CGImage); 
     CIFilter gaussianBlurFilter = CIFilter.FromName("CIGaussianBlur"); 
     gaussianBlurFilter.SetValueForKey(imageToBlur,new NSString("inputImage")); 
     gaussianBlurFilter.SetValueForKey(new NSNumber(10.0f),new NSString("inputRadius")); 
     CIImage resultImage = (CIImage) gaussianBlurFilter.ValueForKey(new NSString("outputImage")); 

     UIImage finalImage = new UIImage(resultImage); 
     UIImageView imageView = new UIImageView(view.Bounds); 
     imageView.Image = finalImage; 
     return imageView; 
    } 
+0

幫助我們幫助您: - )如果你可以提供一個鏈接到原始的ObjC代碼*和*,如果你可以描述你幾乎*實現了什麼(與你所預期的相比),那將會更容易。 – poupou

+0

對不起,我用這個堆棧溢出文章作爲參考。 http://stackoverflow.com/questions/11130923/apply-blur-to-uiview 問候基督教 – canderse

回答

3

首先確保你使用的是iOS 6(或更高版本),因爲CIGaussianBlur不在該版本之前的iOS中可用。

接下來,你錯過了(從原來的代碼)行:

UIGraphicsEndImageContext(); 

這在C#/ MonoTouch的應該是:

MonoTouch.UIKit.UIGraphics.EndImageContext(); 

最後你打一個bug :(

-[UIImage initWithCIImage]: unrecognized selector sent to instance 0x168f2280 

a :在選擇器末尾丟失現在有另一個.ctor接受CIImage以及float(比例)和UIImageOrientation。這一個應該正常工作。

完整的源代碼是:

private UIView CreateBlurView(UIView view) 
{ 
    UIGraphics.BeginImageContext(view.Bounds.Size); 
    view.Layer.RenderInContext(UIGraphics.GetCurrentContext()); 
    UIImage viewImage = UIGraphics.GetImageFromCurrentImageContext(); 
    UIGraphics.EndImageContext(); 

    // Blur Image 
    CIImage imageToBlur = CIImage.FromCGImage(viewImage.CGImage); 
    CIFilter gaussianBlurFilter = CIFilter.FromName("CIGaussianBlur"); 
    gaussianBlurFilter.SetValueForKey(imageToBlur,new NSString("inputImage")); 
    gaussianBlurFilter.SetValueForKey(new NSNumber(10.0f),new NSString("inputRadius")); 
    CIImage resultImage = (CIImage) gaussianBlurFilter.ValueForKey(new NSString("outputImage")); 

    UIImage finalImage = new UIImage(resultImage, 1.0f, UIImageOrientation.Up); 
    UIImageView imageView = new UIImageView(view.Bounds); 
    imageView.Image = finalImage; 
} 

注:錯字一直固定在MonoTouch的和構造將在以後的版本可用(6.0.9+)

+0

感謝作品,我相信它也應該在iOS 5.11上工作,但我還沒有測試過它。但現在我已經開始使用性能開銷,並不能證明它產生的效果。 非常感謝 – canderse

+0

沒問題。請花時間標記(灰色/綠色選中標記下面的問題)以回答問題,以便人們可以快速確定一個類似的問題可以爲他們提供答案(歡迎使用stackoverflow :-) – poupou

相關問題