ios xamarin.ios uiimage grayscale cgrect

ios - MonoTouch convierte color UIImage con alfa a escala de grises y desenfoque?



xamarin.ios grayscale (2)

Monotouch no vincula las funciones de CGRect , por lo que no está seguro de cómo hacerlo.

Cuando se utiliza MonoTouch, CGRect se asigna a RectangleF . Existe una gran cantidad de métodos de extensión que deben GCRect a cada función proporcionada por GCRect . No debería tener ningún problema para portar código ObjectiveC usándolos.

Si falta algo, complete un informe de errores en http://bugzilla.xamarin.com y lo solucionaremos lo antes posible (y proporcionaremos una solución cuando sea posible).

Hay recetas en ObjC pero MonoTouch

Si tiene enlaces, edite su pregunta y agréguela. Eso hará que sea más fácil ayudarte :)

ACTUALIZAR

Aquí hay una traducción de C #, línea por línea, de su ejemplo. Parece que funciona para mí (y es mucho más fácil para mis ojos que Objective-C ;-)

UIImage ConvertToGrayScale (UIImage image) { RectangleF imageRect = new RectangleF (PointF.Empty, image.Size); using (var colorSpace = CGColorSpace.CreateDeviceGray ()) using (var context = new CGBitmapContext (IntPtr.Zero, (int) imageRect.Width, (int) imageRect.Height, 8, 0, colorSpace, CGImageAlphaInfo.None)) { context.DrawImage (imageRect, image.CGImage); using (var imageRef = context.ToImage ()) return new UIImage (imageRef); } }

Estoy tratando de encontrar una receta para producir un UIImage borroso en escala de grises de un color PNG y alfa. Hay recetas en ObjC pero MonoTouch no vincula las funciones de CGRect , por lo que no estoy seguro de cómo hacerlo. ¿Algunas ideas?

Aquí hay un ejemplo ObjC de escala de grises:

(UIImage *)convertImageToGrayScale:(UIImage *)image { // Create image rectangle with current image width/height CGRect imageRect = CGRectMake(0, 0, image.size.width, image.size.height); // Grayscale color space CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray(); // Create bitmap content with current image size and grayscale colorspace CGContextRef context = CGBitmapContextCreate(nil, image.size.width, image.size.height, 8, 0, colorSpace, kCGImageAlphaNone); // Draw image into current context, with specified rectangle // using previously defined context (with grayscale colorspace) CGContextDrawImage(context, imageRect, [image CGImage]); // Create bitmap image info from pixel data in current context CGImageRef imageRef = CGBitmapContextCreateImage(context); // Create a new UIImage object UIImage *newImage = [UIImage imageWithCGImage:imageRef]; // Release colorspace, context and bitmap information CGColorSpaceRelease(colorSpace); CGContextRelease(context); CFRelease(imageRef); // Return the new grayscale image return newImage; }


Escribí un puerto nativo de las categorías de difuminado y tinte UIImage de WWDC para Monotouch.

Código de muestra para tinte y desenfoque:

UIColor tintColor = UIColor.FromWhiteAlpha (0.11f, 0.73f); UIImage yourImage; yourImage.ApplyBlur (20f /*blurRadius*/, tintColor, 1.8f /*deltaSaturationFactor*/, null);