0

我正在使用 UIImage 并且像其他人一样必须处理视网膜和非视网膜显示的适应性。据我所知,视网膜显示需要双像素。

我想知道我是否可以简单地使用具有相同宽度/高度比的大图像,只需将其调整为更小以适应所有设备?

例如,我制作了一个大小为 200*200 像素的原始图像。现在我想在应用程序中使用它作为 20*20 像素和 80*80 像素(两种情况)。然后我必须制作四个副本,例如 img2020.png、img2020@2x.png、img8080.png 和 img8080@2x.png

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

有任何想法吗?非常感谢 :)

4

3 回答 3

3

所有本机 API 都假设您使用image.pngand image@2x.png,因此有时可能很难仅使用一张图像并根据视网膜/非视网膜对其进行缩放。此外,在非视网膜设备上使用视网膜图形会导致更广泛地使用这些设备的资源,从而导致电池消耗。当然,如果你有很多图像,那会降低你的应用程序的性能。换句话说,使用双组图像是有原因的,您应该更好地使用它而不是缩放一张大图像

于 2013-06-21T07:37:43.330 回答
1

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

-(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;
}
于 2013-06-21T12:08:42.353 回答
0

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

有时候我很懒,我的做法是用retina版运行,如果不好,我会创建一个低分辨率的版本。

如果你正在编写一个仅限 iPhone 的应用程序,市场上的大多数 iPhone 都有视网膜,所以我认为你不必担心非视网膜版本。不过只是我的看法。

于 2013-06-21T09:42:32.617 回答