Обрезка изображения с помощью CGImageCreateWithImageInRect

Я пытаюсь реализовать представление камеры iOS, которое делает снимки квадратными по форме (аналогично Instagram). Мой код появляется ниже. Первая часть, где высота кадра задана равной ширине кадра, работает как ожидалось, и пользователю предоставляется представление, которое является квадратным. Проблема возникает позже, когда я пытаюсь применить фрейм (который является свойством CGRect) к данным изображения, используя CGImageCreateWithImageInRect. Я передаю рамку прямо к этому методу с изображением. Но результаты не обрезаны, чтобы быть квадратными. Вместо этого изображение сохраняет исходные размеры по умолчанию от камеры iOS. Может кто-нибудь, пожалуйста, скажите мне, что я сделал неправильно? Мое понимание из документации Apple заключается в том, что CGImageCreateWithImageInRect должен выбрать область изображения формы Rect из некоторой начальной координаты x / y. Но это, похоже, не происходит.

//Set the frame size to be square shaped UIView *view = imagePicker.view; frame = view.frame; frame.size.height = frame.size.width; view.frame = frame; //Crop the image to the frame dimensions using CGImageCreateWithImageInRect -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { [self.popoverController dismissPopoverAnimated:true]; NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType]; [self dismissModalViewControllerAnimated:YES]; if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) { UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; croppedImage = (__bridge UIImage *)(CGImageCreateWithImageInRect((__bridge CGImageRef)(image), frame)); imageView.image = croppedImage; } else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie]) { // Code here to support video if enabled } } 

2 Solutions collect form web for “Обрезка изображения с помощью CGImageCreateWithImageInRect”

Вы поступаете правильно. Единственное, что я думаю, что вы устанавливаете свойство frame так же, как и представление picker, поэтому конечный размер совпадает с исходным размером.

Попробуйте установить рамку меньше, чем pickerView.view.frame, не равную

Проверь это

Обрезание UIImage

Вы неправильно устанавливаете фрейм. Я предлагаю вам взглянуть на этот образец кода от Apple, о том, как создать то, что вы пытаетесь:

https://developer.apple.com/library/mac/#samplecode/VirtualScanner/Listings/Sources_VirtualScanner_m.html#//apple_ref/doc/uid/DTS40011006-Sources_VirtualScanner_m-DontLinkElementID_9

Посмотрите на:

 - (ICAError)startScanningWithParams:(ICD_ScannerStartPB*)pb 

функция

  • Как исправить утечки памяти в проекте iPhone с поддержкой ARC?
  • Xcode 4.2 - загрузчик приложений: невозможно проверить размеры значков, значок не найден
  • Ошибка компоновщика при импорте стороннего проекта
  • Создание и развертывание приложения Iphone на реальном устройстве без программы разработчика Apple и любых сертификатов
  • Приложение не соответствует размеру iOS 8 iPhone симулятор
  • Как я могу заставить первую и последнюю ячейки UITableView оставаться на экране при прокрутке?
  • iOS улучшает скорость рендеринга PDF
  • Можно ли добавить стиль границы в UITableView? (Не BorderColor / BorderWidth)
  • Одноразовая временная электронная почта с поддержкой API загрузки приложений
  • фоновое изображение с настраиваемой вкладкой слишком велико
  • Как сделать интерактивный UIButton над UIImageView?
  • Interesting Posts
    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.