UIImage изменить размер и обрезать, чтобы соответствовать - PullRequest
2 голосов
/ 19 марта 2012

Я тоже много читаю, но не могу найти простой способ сделать это: В цели c - У меня есть большой UIImage и маленький UIImageView. Я хочу программно сжать содержимое UIImage настолько, чтобы оно соответствовало меньшему размеру в UIImageView. Чем больше размер будет обрезан, и результатом будет максимум, который я могу получить из изображения без изменения пропорции.

Не могли бы вы мне помочь?

Ответы [ 2 ]

2 голосов
/ 19 марта 2012

Чтобы отобразить изображение подходящим образом, вы просто устанавливаете свойство imageView.image для своего изображения и настраиваете imageView.contentMode по своему вкусу. Из того, что вы написали, я думаю UIViewContentModeScaleAspectFill - это то, что вы ищете, но поэкспериментируйте с этим, чтобы увидеть, что подходит вам лучше всего.

Если вы хотите сохранить образ на устройстве и абсолютно уверены, что вам никогда не понадобится увеличенная версия образа, то его уменьшение, конечно, сэкономит место на диске и будет разумным решением делать.
Вы, вероятно, сделаете это через CoreGraphics. Вы устанавливаете растровый контекст с желаемыми размерами и указываете изображению нарисоваться там, а затем возвращаете полученное изображение обратно.
Это было бы, однако, довольно дорогой вещью с точки зрения производительности, и вы должны делать это только один раз для каждого изображения, которое вам нужно сжать. Также вы не хотите делать это в своем основном потоке, но GCD делает это очень просто.

1 голос
/ 22 марта 2012

в представлении, в которое я хочу встроить изображение, я использовал этот код:

int xImage=image.size.width;
int xButton=self.frame.size.width;
double ratio=xButton/xImage;
self.imageView.contentMode = UIViewContentModeScaleAspectFill;
[self setImage:[UIImage imageWithCGImage:[image CGImage] scale:ratio orientation:image.imageOrientation] forState:UIControlStateNormal];
[self setImage:[UIImage imageWithCGImage:[image CGImage] scale:ratio orientation:image.imageOrientation] forState:UIControlStateHighlighted];
self.imageView.contentMode = UIViewContentModeScaleAspectFill;

это решило это. UIViewContentModeScaleAspectFill было недостаточно.

...