我的旋转图像没有锐边

时间:2009-08-01 18:19:23

标签: iphone image uiimageview rotation

我使用以下代码旋转图像:

CGAffineTransform rotate = CGAffineTransformMakeRotation( [ratio floatValue] );
[imageView setTransform:rotate];

但它没有尖锐的边缘,有人知道解决方案吗?

这是我得到的图像:

enter image description here

6 个答案:

答案 0 :(得分:12)

使用UIImageView的CALayer对图像进行栅格化将提供最佳的抗锯齿效果。

imageView.layer.shouldRasterize = YES;

答案 1 :(得分:2)

图像边缘看起来呈锯齿状,因为它们直接放入像素网格中,而不是插值。 Nearest Neighbor Interpolation是最简单的插值方式,如果你有像素网格A并将图像移动到像素网格B,则通过简单地选择网格A中最接近的像素来选择网格B中的像素。其他形式的插值选择最接近像素的加权平均值,以得到网格B中的像素值。

你的图像有锯齿状边缘,看起来像是使用最近邻插值,这可能是iphone上仿射变换的默认插值类型。

当您使用除最近邻居之外的其他插值方案时,您将获得aliasing效果,其中当您从一个像素网格转移到另一个像素网格时,子采样并不完美。这种效果使得图像本身的边缘看起来比其他方式更模糊。

答案 2 :(得分:2)

只需为图片添加1px透明边框

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

答案 3 :(得分:1)

任何时候你对图像进行变换(90°增量除外)都会因像素插值而导致边缘稍微柔和。

答案 4 :(得分:0)

您可以在Info.plist中设置一个启用边缘抗锯齿的键:UIViewEdgeAntialiasing。

如以下答案所述:When I rotate an UIImageView with the transform property, the edges pixellate

答案 5 :(得分:0)

最简单的解决方案:

  

只需将此键值对添加到Info.plist:   UIViewEdgeAntialiasing设置为YES。

https://stackoverflow.com/a/12066215/1469060