Изменить размер UIImage с соотношением сторон?

Я использую этот код для изменения размера изображения на 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

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

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 перед рисованием изображения.