Как обрезать UIImageView до нового UIImage в режиме «соответствия сторон»?

enter image description here

Я хотел бы создать новый UIImage, обрезав изображение внутри UIImageView. Например, на приведенном выше рисунке мне нужен новый UIImage области, обведенной зеленым. Я нашел код для этого, обычно он выглядит примерно так (как категория UIImage):

- (UIImage *)croppedImage:(CGRect)bounds {
    CGImageRef imageRef = CGImageCreateWithImageInRect([self CGImage], bounds);
    UIImage *croppedImage = [UIImage imageWithCGImage:imageRef];
    CGImageRelease(imageRef);
    return croppedImage;
}

Имеет смысл. ОДНАКО, мой UIImageView находится в «соответствии сторон» contentMode.Похоже, это усложняет вычисления CGRect для CGImageCreateWithImageInRect, и я не смог найти правильное решение.

Я полагаю, мне нужно применить те же преобразования к зеленому прямоугольнику, что и к изображению?

ТАКЖЕ: я нашел здесь еще один вопрос (Как узнать размер изображения после применения соотношения сторон для изображения в UIImageView), который, кажется, показывает способ грубой силы для получения размера, но Я до сих пор не уверен, как это вписывается в ситуацию обрезки.

Есть идеи?

РЕДАКТИРОВАТЬ: В моем случае у меня буквально есть квадрат, как показано выше, нарисованный в виде наложения поверх UIImageView. Поэтому, хотя я понимаю, что обрезаю UIImage (внутри UIImageView), мне нужно каким-то образом изменить зеленый CGRect, чтобы он «соответствовал» преобразованию, выполненному при применении «соответствия пропорций». Например, если я оставлю свой UIImageView в режиме «верхний левый», все будет работать нормально, потому что между базовым UIImage и UIImageView существует сопоставление 1:1. Проблема в режиме «вверху слева» заключается в том, что изображение не всегда отображается целиком, потому что оно может быть больше, чем мой UIImageView.

8
задан Community 23 May 2017 в 12:18
поделиться