KZVideoVC 横竖屏旋转问题



-(void)takePhoto

{

    

    //播放声音(消声的)

    [[VoiceUtil instance]playBlankSound];

    //根据设备输出获得连接

    AVCaptureConnection *captureConnection = [_captureStillImageOutput connectionWithMediaType:AVMediaTypeVideo];


    //根据连接取得设备输出的数据

    [_captureStillImageOutput captureStillImageAsynchronouslyFromConnection:captureConnection completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) {

    

        if (imageDataSampleBuffer) {

            NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];

            UIImage *image = [UIImage imageWithData:imageData];

//加入两个方法;

            image = [self cutImage:image];

            image = [self fixOrientation:image];

//            NSData *data = UIImageJPEGRepresentation(image, 0.3);

//            UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);

            if (self.delegate != nil && [self.delegate respondsToSelector:@selector(takePhotoCompletion:sessionId:)]) {

                [self.delegate takePhotoCompletion:image sessionId:self.sessionId];

                [self endAniamtion];

            }

            

        

        }

    }];

 

}




//裁剪image

- (UIImage *)cutImage:(UIImage *)srcImg {

    //注意:这个rect是指横屏时的rect,即屏幕对着自己,home建在右边

    CGRect rect = CGRectMake((srcImg.size.height / CGRectGetHeight(self.view.frame)) * 70, 0, srcImg.size.width * 1.33, srcImg.size.width);

    CGImageRef subImageRef = CGImageCreateWithImageInRect(srcImg.CGImage, rect);

    CGFloat subWidth = CGImageGetWidth(subImageRef);

    CGFloat subHeight = CGImageGetHeight(subImageRef);

    CGRect smallBounds = CGRectMake(0, 0, subWidth, subHeight);

    //旋转后,画出来

    CGAffineTransform transform = CGAffineTransformIdentity;

    transform = CGAffineTransformTranslate(transform, 0, subWidth);

    transform = CGAffineTransformRotate(transform, -M_PI_2);

    CGContextRef ctx = CGBitmapContextCreate(NULL, subHeight, subWidth,

                                             CGImageGetBitsPerComponent(subImageRef), 0,

                                             CGImageGetColorSpace(subImageRef),

                                             CGImageGetBitmapInfo(subImageRef));

    CGContextConcatCTM(ctx, transform);

    CGContextDrawImage(ctx, smallBounds, subImageRef);

    CGImageRef cgimg = CGBitmapContextCreateImage(ctx);

    UIImage *img = [UIImage imageWithCGImage:cgimg];

    

    CGContextRelease(ctx);

    CGImageRelease(cgimg);

    return img;

    

    

    

}


//旋转image

- (UIImage *)fixOrientation:(UIImage *)srcImg

{

    CGAffineTransform transform = CGAffineTransformIdentity;

    CGFloat width = srcImg.size.width;

    CGFloat height = srcImg.size.height;

    

    CGContextRef ctx;

    

    switch ([[UIDevice currentDevice] orientation]) {

        case UIDeviceOrientationUnknown:

        case UIDeviceOrientationFaceUp:

        case UIDeviceOrientationFaceDown:

        case UIDeviceOrientationPortrait:

        case UIDeviceOrientationPortraitUpsideDown: //竖屏,不旋转

            ctx = CGBitmapContextCreate(NULL, width, height,

                                        CGImageGetBitsPerComponent(srcImg.CGImage), 0,

                                        CGImageGetColorSpace(srcImg.CGImage),

                                        CGImageGetBitmapInfo(srcImg.CGImage));

            break;

            

        case UIDeviceOrientationLandscapeLeft //横屏,home键在右手边,逆时针旋转90°

           

            transform = CGAffineTransformTranslate(transform, 0, width);

            transform = CGAffineTransformRotate(transform, -M_PI_2);

            ctx = CGBitmapContextCreate(NULL, height, width,

                                        CGImageGetBitsPerComponent(srcImg.CGImage), 0,

                                        CGImageGetColorSpace(srcImg.CGImage),

                                        CGImageGetBitmapInfo(srcImg.CGImage));

            break;

            

        case UIDeviceOrientationLandscapeRight //横屏,home键在左手边,顺时针旋转90°

            transform = CGAffineTransformTranslate(transform, height, 0);

            transform = CGAffineTransformRotate(transform, M_PI_2);

            ctx = CGBitmapContextCreate(NULL, height, width,

                                        CGImageGetBitsPerComponent(srcImg.CGImage), 0,

                                        CGImageGetColorSpace(srcImg.CGImage),

                                        CGImageGetBitmapInfo(srcImg.CGImage));

            break;

            

        default:

            break;

    }

    

    CGContextConcatCTM(ctx, transform);

    CGContextDrawImage(ctx, CGRectMake(0,0,width,height), srcImg.CGImage);

    CGImageRef cgimg = CGBitmapContextCreateImage(ctx);

    UIImage *img = [UIImage imageWithCGImage:cgimg];

    

    CGContextRelease(ctx);

    CGImageRelease(cgimg);

    

    return img;

}


猜你喜欢

转载自blog.csdn.net/ochenmengo/article/details/82880873