IOS: проблема с изменением размера UIImage

Я хочу изменить размер UIImage и пробую этот код:

UIImage *newImage = [image1toResize _imageScaledToSize:CGSizeMake(290, 390) interpolationQuality:1]; 

но у меня есть это предупреждение: предупреждение: «UIImage» может не отвечать на «-_imageScaledToSize:»

Зачем?


person cyclingIsBetter    schedule 14.09.2011    source источник


Ответы (6)


_imageScaledToSize не является функцией UIImage. Если эта функция является частью используемой вами сторонней библиотеки, вам необходимо убедиться, что вы #импортируете правильные заголовки в свой файл.

person Dancreek    schedule 14.09.2011

Вы не просили об этом, но на всякий случай вам интересно, как это сделать... Вот очень простой код для этого:

CGSize newSize = CGSizeMake(1024, 768);  //whaterver size
UIGraphicsBeginImageContext(newSize);
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();    
UIGraphicsEndImageContext();
person user523234    schedule 14.09.2011
comment
Я знаю, что этой ветке уже год, но у меня был успех с вашим кодом, за одним исключением... мое изображение выглядит следующим образом: UIImage *image = [UIImage imageNamed:@myImage.png]; Этот конкретный файл изображения (другая переменная) используется в другом месте на моем дисплее, и его размер изменяется в обоих местах ... у меня где-то есть проблема со ссылкой? Или мне нужно иметь еще одну копию изображения в моих файлах? Последнее кажется неуместным... - person d3v1lman1337; 27.09.2012
comment
У вас, вероятно, проблема со ссылкой. - person user523234; 29.09.2012

Вы можете изменить размер, выполнив:

+ (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
   //UIGraphicsBeginImageContext(newSize);
   UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
   [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
   UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();    
   UIGraphicsEndImageContext();
   return newImage;
}
person ThePunisher    schedule 23.11.2012

Вы можете использовать эти категории в UIImage для управления UIImage объектами (например, для изменения их размера или обрезки):

http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/

person Javier Soto    schedule 14.09.2011

Это потому, что класс UIImage не имеет такого метода. Список доступных UIImage методов вы можете найти здесь< /а>

person jamapag    schedule 14.09.2011

Лучший способ масштабировать изображения без потери соотношения сторон (т. е. без растяжения изображения) — использовать этот метод:

//to scale images without changing aspect ratio

+ (UIImage *) scaleImage: (UIImage *) image toSize: (CGSize) newSize {

float width = newSize.width;
float height = newSize.height;

UIGraphicsBeginImageContext(newSize);
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;

//indent in case of width or height difference
float offset = (width - height) / 2;
if (offset > 0) {
    rect.origin.y = offset;
}
else {
    rect.origin.x = -offset;
}

[image drawInRect: rect];

UIImage *smallImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return smallImage;

}

Добавьте этот метод в свой класс Utility, чтобы вы могли использовать его во всем своем проекте, и получите к нему доступ следующим образом:

xyzImageView.image = [Utility scaleImage:yourUIImage toSize:xyzImageView.frame.size];

Этот метод обеспечивает масштабирование при сохранении соотношения сторон. Он также добавляет отступы к изображению, если уменьшенное изображение имеет большую ширину, чем высоту (или наоборот).

person codeburn    schedule 03.05.2013