Я реализую функцию масштабирования в приложении камеры, используя 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];
Он масштабирует изображение, но не в его центре, а, кажется, в верхней правой области. (я не уверен).
Другая проблема (я должен был быть более ясным в ОП) заключается в том, что изображение остается в том же разрешении, но я бы предпочел просто обрезать его.