Подтвердить что ты не робот

Как уменьшить качество/размер изображения в iPhone objective-c?

У меня есть приложение, которое позволяет пользователю делать снимок с помощью своего 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, чтобы приложение могло эффективно работать с памятью? Меня не волнует, если я потеряю качество изображения.

Спасибо заранее.

4b9b3361

Ответ 1

Вы можете создать графический контекст, нарисовать изображение в нужном масштабе и использовать возвращаемое изображение. Например:

UIGraphicsBeginImageContext(CGSizeMake(480,320));

CGContextRef            context = UIGraphicsGetCurrentContext();

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

UIImage        *smallImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();    

Ответ 2

Я знаю, что этот вопрос уже решен, но если кто-то (как и я) хочет масштабировать изображение, сохраняя пропорции, этот код может быть полезен:

-(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;
}

Ответ 3

Используйте contentOfFile и убедитесь, что все ваши изображения -.png. Apple оптимизирована для png.

О, используйте метод contentOfFile, а не метод imageName. Несколько причин для этого. Изображения, которые записываются в память с помощью ImageName, остались в памяти даже после вызова [release].

Не спрашивай меня почему. Яблоко так мне сказал.

Ройделл Кларк