繁体   English   中英

在iPhone上使用UIImageView缩放图像

[英]Image scaling with UIImageView on iPhone

我有一个由多个UIImageViews组成的自定义视图。 这些UIImageViews的大小可以有所不同(从200x200到50x50)。 它们显示的图像(从png文件加载)以尽可能高的分辨率(200x200)存储在资源中,但经常以较低的分辨率显示。

目前,我只是以全分辨率加载UIImageViews的图像,因此:

UIImage* anImage = [UIImage imageWithContentsOfFile:imagePathAndName]; // anImage is 200x200
aView = [[UIImageView alloc] initWithImage:anImage];
aView.frame = myFrame; // myFrame is 50x50

第一个问题,仅让UIImageView将图像从200x200缩小到50x50,是否会降低性能(内存或CPU时间)? 由此看来,我的应用程序似乎并没有使用大量内存或速度变慢,但是如果我可以加快速度或减少内存消耗,那将是一个成功。

我以编程方式缩放图像。 像这样:

UIImage* anImage = [UIImage imageWithContentsOfFile:imagePathAndName]; // Image is UIGraphicsBeginImageContext( scaledSize ); // scaledSize is 50x50
CGRect scaledRect = CGRectMake( 0.0, 0.0, scaledSize.width, scaledSize.height );
[anImage drawInRect:scaledRect];
UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext(); // Scaled image is now 50x50
UIGraphicsEndImageContext();
aView = [[UIImageView alloc] initWithImage:scaledImage];
aView.frame = myFrame; // myFrame is 50x50

首先以编程方式缩放图像似乎没有什么不良影响……直到我将其加载到iPhone 4上为止。请参见,UIImageView的大小取决于其父视图(在IB中进行布局)是否是其父视图的大小。 iPhone 3G屏幕的大小。 可悲的是,尽管iPhone 4的分辨率是3G的两倍,但在iPhone 4上运行时,此视图的大小是相同的。 因此,通过基于视图的大小缩放图像,最终使它们的分辨率低于iPhone 4上的分辨率,并且看起来有些cr脚。

因此,第二个问题是,以编程方式按比例缩小图像是否有好处。 如何利用iPhone 4上的多余像素? 显然,我无法以自己的观点来衡量。

避免过早优化。

如果您的应用运行良好,则运行良好。 如果不是,请尝试对其进行优化。

根据我使用200px图像(50px图像可以做到)的经验就可以了。 可以轻松地将图像加载到图形硬件,并且缩放很可能是在硬件中完成的。

如果性能分析告诉我,我只会对图像进行预缩放。

对于问题的第二部分,您必须注意实际的缩放代码,CoreGraphics对视网膜显示一无所知。 因此,在CGBitmapContext中,除非您另有说明,否则点像素。 在代码段中,您省略了创建位图上下文的行,但最有可能是UIGraphicsBeginImageContext(CGSize size) 看一下并使用UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale); 代替。 通常按比例传递0.0。

UIKit函数:UIGraphicsBeginImageContextWithOptions

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM