Я реализую функцию масштабирования в приложении камеры, используя AVFoundation
.Я масштабирую свой предварительный просмотр следующим образом:
[videoPreviewView setTransform:CGAffineTransformMakeScale(cameraZoom, cameraZoom)];
Теперь, после того как я сделаю снимок, я хотел бы увеличить / обрезать изображение со значением cameraZoom
, прежде чем сохранить его в кадре камеры.Как лучше мне это сделать?
Редактировать: Используя ответ Джастина:
CGRect imageRect = CGRectMake(0.0f, 0.0f, image.size.width, image.size.height);
CGImageRef imageRef = CGImageCreateWithImageInRect([image CGImage], imageRect);
CGContextRef bitmapContext = CGBitmapContextCreate(NULL, CGImageGetWidth(imageRef), CGImageGetHeight(imageRef), CGImageGetBitsPerComponent(imageRef), CGImageGetBytesPerRow(imageRef), CGImageGetColorSpace(imageRef), CGImageGetBitmapInfo(imageRef));
CGContextScaleCTM(bitmapContext, scale, scale);
CGContextDrawImage(bitmapContext, imageRect, imageRef);
CGImageRef zoomedCGImage = CGBitmapContextCreateImage(bitmapContext);
UIImage* zoomedImage = [[UIImage alloc] initWithCGImage:imageRef];
Это увеличение изображения, но оно не берет его центр, а, кажется, принимаетверхняя правая область.(Я не уверен).
Другая проблема, (я должен был быть более ясным в ОП), состоит в том, что изображение остается в том же разрешении, но я бы просто обрезал его.