C# MonoTouch从CIImage生成UIImage会导致参数无效/选择器错误
我试图创建一个模糊的背景,当我显示一个流行音乐我几乎得到它的工作 我找到了一些客观的C,我把它翻译成了C 问题就在这方面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
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;
}