iPhone uygulamamda, kamera ile bir resim çekiyorum, sonra onu 290*390 piksele yeniden boyutlandırmak istiyorum. Görüntüyü yeniden boyutlandırmak için bu yöntemi kullanıyordum:
UIImage *newImage = [image _imageScaledToSize:CGSizeMake(290, 390)
interpolationQuality:1];
Mükemmel çalışıyor, ancak belgelenmemiş bir işlev, bu yüzden artık iPhone OS4 ile kullanamıyorum.
Peki... bir UIImage'ı yeniden boyutlandırmanın en basit yolu nedir?
En basit yol, UIImageView
çerçevesini ayarlamak ve contentMode
u yeniden boyutlandırma seçeneklerinden birine ayarlamaktır.
Ya da bir resmi gerçekten yeniden boyutlandırmanız gerekiyorsa bu yardımcı program yöntemini kullanabilirsiniz:
+ (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
//UIGraphicsBeginImageContext(newSize);
// In next line, pass 0.0 to use the current device's pixel scaling factor (and thus account for Retina resolution).
// Pass 1.0 to force exact pixel size.
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
Örnek kullanım:
#import "MYUtil.h"
…
UIImage *myIcon = [MYUtil imageWithImage:myUIImageInstance scaledToSize:CGSizeMake(20, 20)];
Trevor Howard'ın yeniden boyutlandırmayı oldukça güzel bir şekilde ele alan bazı UIImage kategorileri var. Başka bir şey yoksa kodu örnek olarak kullanabilirsiniz.
Not: iOS 5.1'den itibaren bu yanıt geçersiz olabilir. Aşağıdaki yoruma bakın.
Bunun yapıldığını da gördüm (düğmeler sığacak şekilde "yeniden boyutlandırılmadığı" için Normal ve Seçili durum için "UIButtons" üzerinde kullanıyorum). Orijinal yazar her kimse ona teşekkür ederim.
Önce UIImageResizing.h
ve UIImageResizing.m
adında boş bir .h ve .m dosyası oluşturun
// Put this in UIImageResizing.h
@interface UIImage (Resize)
- (UIImage*)scaleToSize:(CGSize)size;
@end
// Put this in UIImageResizing.m
@implementation UIImage (Resize)
- (UIImage*)scaleToSize:(CGSize)size {
UIGraphicsBeginImageContext(size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, 0.0, size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, size.width, size.height), self.CGImage);
UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return scaledImage;
}
@end
Bu .h dosyasını, işlevi kullanacağınız .m dosyasına ekleyin ve ardından şu şekilde çağırın:
UIImage* image = [UIImage imageNamed:@"largeImage.png"];
UIImage* smallImage = [image scaleToSize:CGSizeMake(100.0f,100.0f)];