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