美文网首页
利用coreImage croppedSampleBuffer

利用coreImage croppedSampleBuffer

作者: 陆号 | 来源:发表于2018-06-14 12:13 被阅读21次

CoreImage的使用及常见滤镜工具

        glContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
        context = [CIContext contextWithEAGLContext:glContext];
-(CVPixelBufferRef)croppedSampleBuffer:(CMSampleBufferRef)sampleBuffer targetSize:(CGSize)targetSize
{
    CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
    if (shouldChangeTransform)
    {
        CGSize imageSize = CVImageBufferGetEncodedSize(imageBuffer);
        CGSize rotatedSize ={imageSize.height,imageSize.width};
        CGFloat shorterSize = (rotatedSize.width < rotatedSize.height) ? rotatedSize.width : rotatedSize.height;
        
        rotateTransform =CGAffineTransformMakeTranslation(imageSize.width / 2.0,imageSize.height / 2.0);
        rotateTransform =CGAffineTransformRotate(rotateTransform, - pi / 2.0);
        rotateTransform =CGAffineTransformTranslate(rotateTransform, -imageSize.height / 2.0,-imageSize.width / 2.0);
        
        CGFloat scale = targetSize.width / shorterSize;
        scaleTransform = CGAffineTransformMakeScale(scale,scale);
        
        CGFloat xDiff = rotatedSize.width * scale - targetSize.width;
        CGFloat yDiff = rotatedSize.height * scale - targetSize.height;
        cropTransform = CGAffineTransformMakeTranslation(xDiff/2.0,yDiff/2.0);
        
        CVPixelBufferCreate(kCFAllocatorDefault, targetSize.width, targetSize.height, kCVPixelFormatType_32BGRA, nil, &resultBuffer);
        
        shouldChangeTransform =NO;
    }
    CIImage *ciImage = [CIImage imageWithCVImageBuffer:imageBuffer];
    CIImage *rotated = [ciImage imageByApplyingTransform:rotateTransform];
    CIImage *scaled = [rotated imageByApplyingTransform:scaleTransform];
    CIImage *cropped = [scaled imageByApplyingTransform:cropTransform];
    
    [context render:cropped toCVPixelBuffer:resultBuffer];
    return resultBuffer;
}

相关文章

网友评论

      本文标题:利用coreImage croppedSampleBuffer

      本文链接:https://www.haomeiwen.com/subject/jytyeftx.html