Изменить размер UIImage с соотношением сторон? - PullRequest
35 голосов
/ 09 ноября 2009

Я использую этот код для изменения размера изображения на iPhone:

CGRect screenRect = CGRectMake(0, 0, 320.0, 480.0);
UIGraphicsBeginImageContext(screenRect.size);
[value drawInRect:screenRect blendMode:kCGBlendModePlusDarker alpha:1];
UIImage *tmpValue = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

Что отлично работает, если соотношение сторон изображения соответствует новому формату изображения. Я хотел бы изменить это так, чтобы он сохранял правильное соотношение сторон и просто помещал черный фон везде, где изображение не показывалось. Поэтому я все равно получу изображение размером 320x480, но с черным сверху и снизу или по бокам, в зависимости от размера исходного изображения.

Есть ли простой способ сделать это похожим на то, что я делаю? Спасибо!

1 Ответ

53 голосов
/ 09 ноября 2009

После того, как вы установите прямоугольник экрана, сделайте что-то вроде следующего, чтобы решить, в какой прямоугольник рисовать изображение:

float hfactor = value.bounds.size.width / screenRect.size.width;
float vfactor = value.bounds.size.height / screenRect.size.height;

float factor = fmax(hfactor, vfactor);

// Divide the size by the greater of the vertical or horizontal shrinkage factor
float newWidth = value.bounds.size.width / factor;
float newHeight = value.bounds.size.height / factor;

// Then figure out if you need to offset it to center vertically or horizontally
float leftOffset = (screenRect.size.width - newWidth) / 2;
float topOffset = (screenRect.size.height - newHeight) / 2;

CGRect newRect = CGRectMake(leftOffset, topOffset, newWidth, newHeight);

Если вы не хотите увеличивать изображения меньше, чем screenRect, убедитесь, что factor больше или равно единице (например, factor = fmax(factor, 1)).

Чтобы получить черный фон, вы, вероятно, просто захотите установить цвет контекста на черный и вызвать fillRect перед рисованием изображения.

...