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;
}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。