Ios 从相机拍摄时图像失去清晰度

Ios 从相机拍摄时图像失去清晰度,ios,uiimageview,uiimagepickercontroller,Ios,Uiimageview,Uiimagepickercontroller,我正在使用UIImagePickerController单击相机中的图片,然后根据其纵横比缩放图像,并获得尺寸为320*428的新图像 当我将其显示在iPhone4中尺寸为320*374的UIImageView上,图像为UIViewContentModeTopLeft时,图像会失去像素或清晰度 在iPhone5中,我将图像缩放到345*462的尺寸。当我在iPhone5中显示尺寸为320*462的UIImageView,图像为UIViewContentModeTopLeft时,图像会失去像素或清

我正在使用UIImagePickerController单击相机中的图片,然后根据其纵横比缩放图像,并获得尺寸为320*428的新图像

  • 当我将其显示在iPhone4中尺寸为320*374的UIImageView上,图像为UIViewContentModeTopLeft时,图像会失去像素或清晰度

  • 在iPhone5中,我将图像缩放到345*462的尺寸。当我在iPhone5中显示尺寸为320*462的UIImageView,图像为UIViewContentModeTopLeft时,图像会失去像素或清晰度

  • 请告诉我出去的路。 我缩放图像的代码是: -(UIImage*)缩放动态图像:(UIImage*)图像Kmax分辨率:(int)Kmax分辨率 {


    }

    尝试将图像大小加倍。这是iPhone 5上的视网膜显示,可能导致质量下降的原因显示缩放图像的代码。您使用的是UIGraphicsBeginImageContext还是UIGraphicsBeginImageContextWithOptions?我使用的是UIImageBeginImageContext方法,而且在iphone 4上的质量也在下降,因此我认为视网膜或非视网膜没有问题,我认为我的UIScrollview框架存在问题,我在其中放置的UIImageView与scrollview大小相同。
    CGImageRef imgRef = image.CGImage;
    
    CGFloat width = CGImageGetWidth(imgRef);
    CGFloat height = CGImageGetHeight(imgRef);
    
    CGAffineTransform transform = CGAffineTransformIdentity;
    CGRect bounds = CGRectMake(0, 0, width, height);
    if (width > kMaxResolution || height > kMaxResolution) {
        CGFloat ratio = width/height;
        if (ratio > 1) {
            bounds.size.width = kMaxResolution;
            bounds.size.height = bounds.size.width / ratio;
        }
        else {
            bounds.size.height = kMaxResolution;
            bounds.size.width = bounds.size.height * ratio;
        }
    }
    
    CGFloat scaleRatio = bounds.size.width / width;
    CGSize imageSize = CGSizeMake(CGImageGetWidth(imgRef), CGImageGetHeight(imgRef));
    CGFloat boundHeight;
    UIImageOrientation orient = image.imageOrientation;
    switch(orient) {
    
        case UIImageOrientationUp: //EXIF = 1
            transform = CGAffineTransformIdentity;
            break;
    
        case UIImageOrientationUpMirrored: //EXIF = 2
            transform = CGAffineTransformMakeTranslation(imageSize.width, 0.0);
            transform = CGAffineTransformScale(transform, -1.0, 1.0);
            break;
    
        case UIImageOrientationDown: //EXIF = 3
            transform = CGAffineTransformMakeTranslation(imageSize.width, imageSize.height);
            transform = CGAffineTransformRotate(transform, M_PI);
            break;
    
        case UIImageOrientationDownMirrored: //EXIF = 4
            transform = CGAffineTransformMakeTranslation(0.0, imageSize.height);
            transform = CGAffineTransformScale(transform, 1.0, -1.0);
            break;
    
        case UIImageOrientationLeftMirrored: //EXIF = 5
            boundHeight = bounds.size.height;
            bounds.size.height = bounds.size.width;
            bounds.size.width = boundHeight;
            transform = CGAffineTransformMakeTranslation(imageSize.height, imageSize.width);
            transform = CGAffineTransformScale(transform, -1.0, 1.0);
            transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);
            break;
    
        case UIImageOrientationLeft: //EXIF = 6
            boundHeight = bounds.size.height;
            bounds.size.height = bounds.size.width;
            bounds.size.width = boundHeight;
            transform = CGAffineTransformMakeTranslation(0.0, imageSize.width);
            transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);
            break;
    
        case UIImageOrientationRightMirrored: //EXIF = 7
            boundHeight = bounds.size.height;
            bounds.size.height = bounds.size.width;
            bounds.size.width = boundHeight;
            transform = CGAffineTransformMakeScale(-1.0, 1.0);
            transform = CGAffineTransformRotate(transform, M_PI / 2.0);
            break;
    
        case UIImageOrientationRight: //EXIF = 8
            boundHeight = bounds.size.height;
            bounds.size.height = bounds.size.width;
            bounds.size.width = boundHeight;
            transform = CGAffineTransformMakeTranslation(imageSize.height, 0.0);
            transform = CGAffineTransformRotate(transform, M_PI / 2.0);
            break;
    
        default:
            [NSException raise:NSInternalInconsistencyException format:@"Invalid image orientation"];
    
    }
    
    UIGraphicsBeginImageContext(bounds.size);
    
    CGContextRef context = UIGraphicsGetCurrentContext();
    
    if (orient == UIImageOrientationRight || orient == UIImageOrientationLeft) {
        CGContextScaleCTM(context, -scaleRatio, scaleRatio);
        CGContextTranslateCTM(context, -height, 0);
    }
    else {
        CGContextScaleCTM(context, scaleRatio, -scaleRatio);
        CGContextTranslateCTM(context, 0, -height);
    }
    
    CGContextConcatCTM(context, transform);
    
    CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, width, height), imgRef);
    UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return imageCopy;