代码之家  ›  专栏  ›  技术社区  ›  zpasternack

在iPhone上使用UIImageView进行图像缩放

  •  0
  • zpasternack  · 技术社区  · 14 年前

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

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

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

    我用编程的方式缩放图像。这样地:

    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
    

    以编程方式缩放图像似乎没有什么不良影响。。。直到我把它装进iPhone4。看,UIImageView的大小取决于父视图的大小,父视图(以IB显示)的大小相当于iphone3g屏幕的大小。遗憾的是,尽管iphone4的分辨率是3G的两倍,但在iphone4上运行时,这个视图的大小是相同的。因此,通过根据视图的大小缩放图像,我最终使它们的分辨率低于iphone4的分辨率,它们看起来有点糟糕。

    1 回复  |  直到 14 年前
        1
  •  4
  •   tonklon    14 年前

    如果你的应用程序运行良好,它运行良好。如果没有,试着优化它。

    根据我的经验,使用200px的图像,而50px的图像就可以了。图像可以很容易地加载到图形硬件中,缩放很可能是在硬件中完成的。

    只有在性能分析告诉我的情况下,我才会对图像进行预缩放。

    对于问题的第二部分,实际的缩放代码,您必须注意,CoreGraphics对视网膜显示一无所知。所以在CGBitmapContext中 UIGraphicsBeginImageContext(CGSize size) UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale); 相反。按比例通过0.0通常应该这样做。

    UIKit Functions: UIGraphicsBeginImageContextWithOptions

    推荐文章