Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MonoTouch从CIImage生成UIImage会导致参数无效/选择器错误_C#_Objective C_Xamarin.ios_Core Graphics_Ciimage - Fatal编程技术网

C# MonoTouch从CIImage生成UIImage会导致参数无效/选择器错误

C# MonoTouch从CIImage生成UIImage会导致参数无效/选择器错误,c#,objective-c,xamarin.ios,core-graphics,ciimage,C#,Objective C,Xamarin.ios,Core Graphics,Ciimage,我试图创建一个模糊的背景,当我显示一个流行音乐我几乎得到它的工作 我找到了一些客观的C,我把它翻译成了C 问题就在这方面 UIImage finalImage = new UIImage(resultImage); 希望这只是我做错了什么 private UIView CreateBlurView(UIView view) { UIGraphics.BeginImageContext(view.Bounds.Size); view.Layer.R

我试图创建一个模糊的背景,当我显示一个流行音乐我几乎得到它的工作

我找到了一些客观的C,我把它翻译成了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;
    }

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

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

UIGraphicsEndImageContext();
C#/MonoTouch中的哪一个应该是:

MonoTouch.UIKit.UIGraphics.EndImageContext ();
最后,您遇到了一个错误:(

选择器末尾缺少一个
。现在有另一个.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+)

帮助我们帮助您:-)如果您可以提供指向原始ObjC代码的链接,并且如果您可以描述您几乎实现的内容(与您执行的内容相比),那么就更容易了。很抱歉,我使用了这篇堆栈溢出文章作为参考。关于ChristianThanks,我相信它在ios 5.11上也能工作,但我还没有测试过它。但是现在我已经开始工作了,性能开销并不能证明它所产生的效果是正确的。许多人都没有问题。请花点时间将问题标记为已回答的问题(投票下方的灰色/绿色复选标记),以便人们在回答类似问题时能够快速确定答案(欢迎使用stackoverflow:-)
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;
}