我有一個由多個UIImageView組成的自定義視圖。這些UIImageView可以在大小上有所不同(從200x200到50x50)。它們顯示的圖像(從png文件加載)以儘可能高的分辨率(200x200)存儲在資源中,但通常以較低的分辨率顯示。使用iPhone上的UIImageView縮放圖像
目前我只加載與圖像的UIImageViews在全分辨率,這樣的:
UIImage* anImage = [UIImage imageWithContentsOfFile:imagePathAndName]; // anImage is 200x200
aView = [[UIImageView alloc] initWithImage:anImage];
aView.frame = myFrame; // myFrame is 50x50
第一個問題,有沒有性能損失(內存或CPU時間),只是讓UIImageView的距離縮小圖像發言權200x200到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
編程縮放圖像第一似乎沒有任何不良影響......直到我裝在我的iPhone 4看,的UIImageView的大小是根據大小,如果它的父視圖, (放在IB中)是iPhone 3G屏幕的大小。不幸的是,儘管iPhone 4的分辨率是3G的兩倍,但在iPhone 4上運行時,這個視圖的大小是一樣的。因此,通過根據視圖大小縮放圖像,我最終使它們的分辨率比iPhone 4上的要低,而且看起來有些蹩腳。
所以第二個問題是,如果以編程方式縮小圖像有一定的好處。我怎樣才能利用iPhone 4上的額外像素?顯然,我不能按照我的觀點來看。
UIGraphicsBeginImageContextWithOptions的伎倆完美,謝謝!你對過早優化的觀點很好,我不得不考慮一下。 – zpasternack 2010-08-13 17:53:02