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);