Обрезать изображение до указанного размера и местоположения изображения

У меня есть изображение, которое снимается с помощью AVCaptureSession и возвращается в мой контроллер представления.

Вот скриншот интерфейса камеры:

введите здесь описание изображения

AVCaptureSession делает полноэкранную фотографию, и теперь я хочу обрезать ее до размера видимого окна выше.

Окно всегда будет в одном и том же месте и одинакового размера.

Высота = 360 (180 без сетчатки) пикселей, Ширина = 640 (320 без сетчатки) пикселей, x = 0, y = 160.

Как я могу обрезать изображение до этих координат, чтобы само изображение теперь было 360 x 640?

Любая помощь будет здорово, спасибо!


person Kyle Begeman    schedule 31.12.2013    source источник


Ответы (1)


Вам нужно будет сделать что-то вроде этого. Я пишу это с головы, так что это может быть не на 100% правильно.

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL, 640, 360, 8, 4 * width, colorSpace, kCGImageAlphaPremultipliedFirst);
CGColorSpaceRelease(colorSpace);

CGContextDrawImage(context, CGRectMake(0,-160,640,360), cgImgFromAVCaptureSession);

CGImageRef image = CGBitmapContextCreateImage(context);
UIImage* myCroppedImg = [UIImage imageWithCGImage:image];
CGContextRelease(context);      
person Stephen Johnson    schedule 31.12.2013
comment
Я пытаюсь реализовать это сейчас, но какой должна быть ширина 4 *? Кроме того, диспетчер захвата возвращает UIImage, поэтому мне пришлось использовать (_bridge CGImageRef)(capturedImage). Будет ли это иметь значение? - person Kyle Begeman; 01.01.2014
comment
Вы можете получить cgImage из UIImage с помощью img.CGImage. 4 соответствует 4 байтам на пиксель для RGBA. - person Stephen Johnson; 01.01.2014
comment
Кроме того, извините, я хотел заменить ширину на 640, поэтому вы можете просто использовать 4 * 640 или установить переменные для своей ширины и высоты. Кроме того, -160 — это смещение по оси y, которое также может быть переменной. - person Stephen Johnson; 01.01.2014
comment
Это самое близкое, что я пришел! Таким образом, он обрезал изображение, просто странным образом. Это в основном повернуло все изображение боком и разрезало его пополам. Я немного поиграю со значениями. Я также получаю предупреждение при создании контекста: неявное преобразование из типа перечисления «enum CGImageAlphaInfo» в другой тип перечисления «CGBitmapInfo» (он же «enum CGBitmapInfo»). Любая идея, что это такое? - person Kyle Begeman; 01.01.2014
comment
На самом деле, если я изменю прямоугольник на (0, 0, 640, 360), он в основном берет изображение и поворачивает его боком, но он идеально вписывается в UIImageView, в который я отправляю его. - person Kyle Begeman; 01.01.2014