12

我有一个应用程序,可以让用户用他/她的 iPhone 拍照并将其用作应用程序的背景图像。我UIImagePickerController用来让用户拍照并将背景UIImageView图像设置为返回的UIImage对象。

IBOutlet UIImageView *backgroundView;

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo {
 backgroundView.image = image;
 [self dismissModalViewControllerAnimated:YES];
}

这一切都很好。如何将大小减小UIImage到 480x320,以便我的应用程序可以提高内存效率?我不在乎我是否会失去任何图像质量。

提前致谢。

4

3 回答 3

16

您可以创建一个图形上下文,以所需的比例将图像绘制到该上下文中,然后使用返回的图像。例如:

UIGraphicsBeginImageContext(CGSizeMake(480,320));

CGContextRef            context = UIGraphicsGetCurrentContext();

[image drawInRect: CGRectMake(0, 0, 480, 320)];

UIImage        *smallImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();    
于 2010-01-17T00:58:36.477 回答
15

我知道这个问题已经解决了,但是如果有人(像我一样)想要缩放图像以保持纵横比,这段代码可能会有所帮助:

-(UIImage *)resizeImage:(UIImage *)image toSize:(CGSize)size
{
    float width = size.width;
    float height = size.height;

    UIGraphicsBeginImageContext(size);
    CGRect rect = CGRectMake(0, 0, width, height);

    float widthRatio = image.size.width / width;
    float heightRatio = image.size.height / height; 
    float divisor = widthRatio > heightRatio ? widthRatio : heightRatio;

    width = image.size.width / divisor; 
    height = image.size.height / divisor;

    rect.size.width  = width;
    rect.size.height = height;

    if(height < width)
        rect.origin.y = height / 3;

    [image drawInRect: rect];

    UIImage *smallImage = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();   

    return smallImage;
}
于 2012-01-13T13:27:51.690 回答
3

使用 contentOfFile 并确保所有图像都是 .png。苹果针对 png 进行了优化。

哦,使用 contentOfFile 而不是 imageName 方法。有几个原因。由 ImageName 带入内存的图像即使在调用 [release] 后仍保留在内存中。

不要问我为什么。苹果是这么告诉我的。

罗伊德尔克拉克

于 2011-04-09T18:49:27.747 回答