Я думаю, что у меня может быть странный запрос, однако, надеюсь, кто-то может помочь. Я использую хорошо известный UIScrollView
+ UIImageView
для увеличения и уменьшения изображения, а также панорамирования. Это отлично работает и денди, но в текущем проекте у нас есть возможность обрезать изображение, но также включать черные полосы по бокам, если изображение меньше прямоугольника обрезки. См. Изображения ниже.Обрезать часть UIImage из большего UIImage и включать части изображения, не содержащие изображения
Мы хотим захватить все внутри синего квадрата, включая белый (который будет черным, поскольку непрозрачный установлен на YES
).
Это отлично подходит для изображений, которые полностью уменьшены (белый - просто дополнительное пространство UIImageView).
Однако проблема возникает, когда мы пытаемся масштабировать изображение и снимаем только ту часть, плюс пустое пространство.
Это приводит к следующему изображению
Проблема, которую мы видим, что мы должны быть в состоянии создать изображение, которое является именно то, что находится в Rect Crop, независимо от того, есть часть изображение там или нет. Другая проблема заключается в том, что мы хотим иметь возможность динамически изменять разрешение вывода. Соотношение сторон составляет 16: 9, и для этого примера kMaxWidth = 1136
и kMaxHeight = 639
, однако в будущем мы можем запросить большее или меньшее разрешение 16: 9.
Ниже функция у меня до сих пор:
- (UIImage *)createCroppedImageFromImage:(UIImage *)image {
CGSize newRect = CGSizeMake(kMaxWidth, kMaxHeight);
UIGraphicsBeginImageContextWithOptions(newRect, YES, 0.0);
// 0 is the edge of the screen, to help with zooming
CGFloat xDisplacement = ((abs(0 - imageView.frame.origin.x) * kMaxWidth)/(self.cropSize.width/self.scrollView.zoomScale)/self.scrollView.zoomScale);
CGFloat yDisplacement = ((abs(self.cropImageView.frame.origin.y - imageView.frame.origin.y) * kMaxHeight)/(self.cropSize.height/self.scrollView.zoomScale)/self.scrollView.zoomScale);
CGFloat newImageWidth = (self.image.size.width * kMaxWidth)/(self.cropSize.width/self.scrollView.zoomScale);
CGFloat newImageHeight = (self.image.size.height * kMaxHeight)/(self.cropSize.height/self.scrollView.zoomScale);
[image drawInRect:CGRectMake(xDisplacement, 0, newImageWidth, newImageHeight)];
UIImage *croppedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return croppedImage;
}
Любая помощь будет принята с благодарностью.
Вы ответили и приняли свой вопрос? лол – Rich86man