1

当我显示一个弹出窗口时,我试图创建一个模糊的背景,我几乎让它工作了。

我找到了一些我翻译成 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;
    }
4

1 回答 1

3

首先确保您使用的是 iOS 6(或更高版本),因为CIGaussianBlur在该版本之前的 iOS 中不可用。

接下来,您缺少(从原始代码中)该行:

UIGraphicsEndImageContext();

在 C# / MonoTouch 中应该是:

MonoTouch.UIKit.UIGraphics.EndImageContext ();

最后你遇到了一个错误:(

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

:选择器末尾缺少a 。现在有另一个 .ctor 接受 aCIImage以及float(scale) 和 a 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+)中可用

于 2012-12-07T01:59:21.557 回答