是否可以在不降低质量的情况下调整UIImage的大小?

时间:2011-11-17 21:07:33

标签: iphone ios cocoa-touch graphics core-graphics

我有一个UIImage,我把它放在一个UIImageView上,它附有一个捏手势识别器,用于缩放图像。当我在UIImageView中缩放图像时,没有失真并且它完美地缩放。但是,我需要调整UIImage的大小,而不是在UIImageView中,当我使用下面的代码执行此操作时,结果略有偏差:

CGFloat width = self.imageView.frame.size.width;
CGFloat height = self.imageView.frame.size.height;

UIGraphicsBeginImageContext(CGSizeMake(width, height));
[self.image drawInRect:CGRectMake(0, 0, width, height)];
UIImage *resizedImage = [UIGraphicsGetImageFromCurrentImageContext() retain];    
UIGraphicsEndImageContext();

正如您所看到的,我从imageView获取高度和宽度,因为这是图像需要缩放到的位置。

我知道如果imageView能够做到这一点,必须能够完美地扩展它,是否有人碰巧知道我做错了什么?

更新:我附加了一个图像的前/后(用户在图像视图中重新调整过的图像)以及使用上述方法调整大小后的图像。Before After < / p>

2 个答案:

答案 0 :(得分:1)

试试这个:

+ (UIImage*)rescaleImage:(UIImage *)image scaledToSize:(CGRect)newSize {
    UIGraphicsBeginImageContext(newSize.size);
    [image drawInRect:newSize];
    UIImage *resImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return resImage;
}

答案 1 :(得分:1)

我遇到了同样的问题,我使用以下代码来帮助修复它:

    CGFloat scale = 1.0;
if([[UIScreen mainScreen]respondsToSelector:@selector(scale)]) {        
    CGFloat tmp = [[UIScreen mainScreen]scale];
    if (tmp > 1.5) {
        scale = 2.0;    
    }
} 

if(scale > 1.5) {
    UIGraphicsBeginImageContextWithOptions(targetSize, NO, scale);
} else {
    UIGraphicsBeginImageContext(targetSize);
}