iphone - voltea - Mi imagen girada no tiene bordes afilados
rotar pantalla iphone 7 (6)
Estoy rotando mi imagen con el siguiente código:
CGAffineTransform rotate = CGAffineTransformMakeRotation( [ratio floatValue] );
[imageView setTransform:rotate];
Pero no tiene bordes afilados, ¿alguien sabe una solución para esto?
Aquí está la imagen que obtengo:
Cada vez que realice transformaciones en una imagen (excepto en incrementos de 90 °) provocará bordes ligeramente más suaves debido a la interpolación de píxeles.
Los bordes de la imagen se ven irregulares porque se colocan directamente en una cuadrícula de píxeles y no se interpolan. La interpolación del vecino más cercano es el tipo más simple de interpolación, donde si tiene la cuadrícula de píxeles A y mueve su imagen a la cuadrícula de píxeles B, los píxeles de la cuadrícula B se eligen simplemente eligiendo el píxel más cercano de la cuadrícula A. Otras formas de interpolación eligen promedio ponderado de los píxeles más cercanos para llegar al valor de píxel en la cuadrícula B.
Su imagen, con sus bordes dentados, parece que está utilizando la interpolación del vecino más cercano, que puede ser el tipo predeterminado de interpolación en una transformación afín en un iphone.
Cuando utilice algún otro esquema de interpolación que no sea el vecino más cercano, obtendrá efectos de aliasing , donde el submuestreo no es perfecto cuando transfiere de una cuadrícula de píxeles a otra. Ese efecto hace que los bordes de la imagen parezcan más borrosos de lo que lo harían.
solo agrega un borde transparente de 1 píxel a tu imagen
CGRect imageRect = CGRectMake(0, 0, image.size.width, image.size.height);
UIGraphicsBeginImageContext( imageRect.size );
[image drawInRect:CGRectMake(1,1,image.size.width-2,image.size.height-2)];
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
Usar CALayer de UIImageView para rasterizar la imagen proporcionará el mejor antialiasing.
imageView.layer.shouldRasterize = YES;
Hay una clave que puede establecer en Info.plist que habilita el antialiasing de los bordes: UIViewEdgeAntialiasing.
Como se describe en la siguiente respuesta: Cuando giro un UIImageView con la propiedad de transformación, los bordes se pixellan
La solución más simple:
Simplemente agregue este par clave-valor a su Info.plist: UIViewEdgeAntialiasing establecido en SÍ.
https://.com/a/12066215/1469060