2013-06-21 51 views
0

我正在使用UIImage,并像其他人一样处理视网膜和非视网膜显示的适应性。据我所知,视网膜显示需要双像素。UIImage调整性能和质量问题

我想知道如果我可以简单地使用具有相同宽度/高度比例的大图像,只需调整它以适应所有设备?

例如,我制作了一个尺寸为200 * 200像素的原始图像。现在我想在应用中将它用作20 * 20像素和80 * 80像素(两种情况)。然后,我必须制作四个副本,如img2020.png,[email protected],img8080.png和[email protected]

所以如果我想在三种不同尺寸的情况下使用它,我必须存储6个副本。我可以使用UIImage的调整大小功能来做到这一点吗?我尝试了一下,但无法弄清楚它的质量和性能。

任何想法?非常感谢:)

+1

http://stackoverflow.com/a/11266873/1059705此链接可能会帮助你。 – Bala

回答

3

所有本地API假设您使用image.png[email protected],所以有时可能很难仅使用一个图像并根据视网膜/非视网膜来缩放它。此外,在非视网膜设备上使用视网膜图形会导致这些设备资源的更广泛使用,从而导致电池耗尽。当然,如果你有很多图像,这会降低应用程序的性能。 换句话说,有理由使用双组图像,你应该更好地使用它,而不是一个缩放的大图像

+0

考虑到@Bala和这个答案的联系,我想接受这个答案是因为我认为最好为视网膜和非视网膜制作两个副本。 – JimZ

+0

很高兴帮助你交配。 –

0

我做过一些比较之前。离开iOS处理大小调整会导致质量下降,有时甚至是不可接受的。

我有时觉得懒惰,我的方法是用视网膜版运行它,如果看起来不好,我会创建一个低分辨率版本。

如果你正在编写iPhone应用程序,市面上的大部分iPhone都有视网膜,所以我认为你不应该担心非视网膜版本。只是我的意见。

1

您不需要制作6份。你应该使用大小200*200 pixel。并将imageview的属性contentMode设置为aspectFit。或者您也可以使用下面的功能并在运行时更改图像的大小。

-(UIImage *)Resize_Image:(UIImage *)image requiredHeight:(float)requiredheight andWidth:(float)requiredwidth 
{ 
    float actualHeight = image.size.height; 
    float actualWidth = image.size.width; 
    if (actualWidth*requiredheight <actualHeight*requiredwidth) 
    { 
     actualWidth=requiredheight*(actualWidth/actualHeight); 
     actualHeight=requiredheight; 
    } 
    else 
    { 
     actualHeight=requiredwidth*(actualWidth/actualHeight); actualWidth=requiredwidth; 
    } 
    CGRect rect = CGRectMake(0.0, 0.0, actualWidth, actualHeight); 
    UIGraphicsBeginImageContext(rect.size); 
    [image drawInRect:rect]; 
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return img; 
}