ios - create - UIImage enmascaramiento con gesto
uiimage frame swift 4 (1)
Estoy tratando de lograr una característica de color selectiva en iOS. Personalmente creo que primero dibujar la forma usando el gesto de los dedos y convertirlo en máscara, pero al mismo tiempo debe ser en tiempo real, debería funcionar cuando muevo mi dedo a través de la imagen en escala de grises. ¿Alguien puede dirigirme para corregir el camino?
Aplicación de ejemplo: https://itunes.apple.com/us/app/color-splash/id304871603?mt=8
Gracias.
Puede colocar dos UIImageView uno sobre el otro, la versión en color en el fondo y la versión en blanco y negro en primer plano.
Luego puede usar touchesBegan
, touchesBegan
, etc. para seguir la entrada del usuario. En los toques movidos puede "borrar" una ruta en la que el usuario movió el dedo de esta manera (self.foregroundDrawView es el UIImageView
blanco y negro):
UIGraphicsBeginImageContext(self.foregroundDrawView.frame.size);
[self.foregroundDrawView.image drawInRect:CGRectMake(0, 0, self.foregroundDrawView.frame.size.width, self.foregroundDrawView.frame.size.height)];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetBlendMode(context, kCGBlendModeClear);
CGContextSetAllowsAntialiasing(context, TRUE);
CGContextSetLineWidth(context, 85);
CGContextSetLineCap(context, kCGLineCapRound);
CGContextSetRGBStrokeColor(context, 1, 0, 0, 1.0);
// Soft edge ... 5.0 works ok, but we try some more
CGContextSetShadowWithColor(context, CGSizeMake(0.0, 0.0), 13.0, [UIColor redColor].CGColor);
CGContextBeginPath(context);
CGContextMoveToPoint(context, touchLocation.x, touchLocation.y);
CGContextAddLineToPoint(context, currentLocation.x, currentLocation.y);
CGContextStrokePath(UIGraphicsGetCurrentContext());
self.foregroundDrawView.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
La parte importante es CGContextSetBlendMode(context, kCGBlendModeClear);
. Esto borra la parte rastreada de la imagen, luego la imagen se retrasa como la imagen de la vista de la imagen en primer plano.
Cuando el usuario termine, debería poder combinar las dos imágenes o usar la imagen en blanco y negro como máscara.