旋转图像时出现锯齿状边缘

5
我有一个白色正方形图片,背景是黑色的。当我旋转图片时,边缘变得非常锯齿状。这看起来真的不好看。有没有设置可以让手机在操作图片时将其平滑处理?或者唯一的选择是要求艺术家使用一些技巧,比如抗锯齿(不知道是否正确)之类的东西吗?我在文档中看到了minificationFilter用于缩放...也许有类似于此的东西适合我的问题,但我还没有在文档中找到。有什么提示吗?
非常感谢, -Code
2个回答

12

要为图像添加1px透明边框,请使用以下代码

    CGRect imageRrect = CGRectMake(0, 0, image.size.width, image.size.height);
    UIGraphicsBeginImageContext( imageRrect.size ); 
    [image drawInRect:CGRectMake(1,1,image.size.width-2,image.size.height-2)];
    image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

5
如果您没有iOS 4 / openGL,有一个几乎同样有效的方法。在所有图像周围留下1像素的透明边框 - 透明边框很粗糙,但由于它是透明的,所以您无法看出来。 图像内部应该看起来很平滑 :)

显然,如果您无法访问原始图像,则此方法仅易于使用。否则,您必须加载图像,将其渲染到具有边框的图形上下文中,并使用新图像:(如果您拥有原始图像/设计师访问权限,请告诉他/她添加1像素的透明边框,您当前的代码应该“只需工作”。

真的吗?全透明还是半透明?我想一些不可见的像素不会有任何影响,因为白色像素仍然存在于不可见像素旁边。就像现在一样,除了不可见像素现在不属于图像;) 这是一个有趣的理论,迪恩 ;) - user440096
完全透明。图像周围只有1px的边框且alpha值为0。当您旋转图像时,只有边框没有抗锯齿-图像内部像素很好地混合在一起。这意味着透明像素看起来很糟糕,但是嘿,它们是透明的,所以我们看不见它们。图像的可见边缘使用透明边框进行抗锯齿处理,因此我们获得了具有抗锯齿效果的边缘。试试看;) - deanWombourne
这种技术是在2011年的WWDC演示中推荐的(我忘记是哪个)。 - titaniumdecoy
太棒了!知道自己至少做对了一件事情总是很好的 :) - deanWombourne
我尝试使用event.media.imageWithTransparentBorder(1)对从showCamera获取的图像进行保存。我可以看到它具有透明边框,但图像的边缘仍然很粗糙。是否有人成功使用过imageWithTransparentBorder? - Andreas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接