I iPhone-appen min tar jeg et bilde med kameraet, og så vil jeg endre størrelsen på det til 290*390 piksler. Jeg brukte denne metoden for å endre størrelsen på bildet:
UIImage *newImage = [image _imageScaledToSize:CGSizeMake(290, 390)
interpolationQuality:1];
Den fungerer perfekt, men det er en udokumentert funksjon, så jeg kan ikke bruke den lenger med iPhone OS4.
Så... hva er den enkleste måten å endre størrelsen på et UIImage på?
Den enkleste måten er å angi rammen til UIImageView
og sette contentMode
til et av størrelsesendringsalternativene.
Eller du kan bruke denne verktøymetoden hvis du faktisk trenger å endre størrelsen på et bilde:
+ (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;
}
Eksempel på bruk:
#import "MYUtil.h"
…
UIImage *myIcon = [MYUtil imageWithImage:myUIImageInstance scaledToSize:CGSizeMake(20, 20)];
Trevor Howard har noen UIImage-kategorier som håndterer størrelsesendring ganske bra. Om ikke annet kan du bruke koden som eksempler.
Merk: Fra og med iOS 5.1 kan dette svaret være ugyldig. Se kommentaren nedenfor.
Jeg har også sett dette gjort (som jeg bruker på UIButtons
for Normal og Selected state siden knapper ikke resizes
for å passe). Kreditt går til den opprinnelige forfatteren.
Lag først en tom .h- og .m-fil som heter UIImageResizing.h
og UIImageResizing.m
.
// 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
Inkluder .h-filen i den .m-filen du skal bruke funksjonen i, og kall den deretter slik:
UIImage* image = [UIImage imageNamed:@"largeImage.png"];
UIImage* smallImage = [image scaleToSize:CGSizeMake(100.0f,100.0f)];