[英]MonoTouch Making a UIImage from a CIImage causes an invalid argument / bad selector
我正在嘗試創建一個模糊的背景,當我顯示一個popover我幾乎讓它工作。
我發現了一些我翻譯成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;
}
首先要確保你使用的是iOS 6(或更高版本),因為在該版本之前,iOS中沒有CIGaussianBlur
。
接下來,您缺少(從原始代碼中)該行:
UIGraphicsEndImageContext();
在C#/ MonoTouch中應該是:
MonoTouch.UIKit.UIGraphics.EndImageContext ();
最后你遇到了一個bug :(
-[UIImage initWithCIImage]: unrecognized selector sent to instance 0x168f2280
a :
在選擇器的末尾缺少。 現在有另一個.ctor接受CIImage
以及float
(scale)和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+)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.