ios – CoreImage坐标系

我有AVAsset的CVPixelBufferRef.我正在尝试将CIFilter应用于它.我用这些线:

CVPixelBufferRef pixelBuffer = ...
CVPixelBufferRef newPixelBuffer = // empty pixel buffer to fill
CIContex *context = // CIContext created from EAGLContext
CGAffineTransform preferredTransform = // AVAsset track preferred transform
CIImage *phase1 = [CIImage imageWithCVPixelBuffer:pixelBuffer];
CIImage *phase2 = [phase1 imageByApplyingTransform:preferredTransform];
CIImage *phase3 = [self applyFiltersToImage:phase2];

[context render:phase3 toCVPixelBuffer:newPixelBuffer bounds:phase3.extent colorSpace:CGColorSpaceCreateDeviceRGB()];

不幸的是,我得到的结果有不正确的方向.例如,以纵向模式拍摄的视频是颠倒的.我想问题是从AVAsset到CoreImage坐标系统(在XCode中显示阶段2的预览也会出现错误的结果).怎么解决

解决方法

我通过这样解决了它,它应该正确地将一切都定位到坐标空间

var preferredTransform = inst.preferredTransform
preferredTransform.b *= -1
preferredTransform.c *= -1

var outputimage = CIImage(cvPixelBuffer: videoFrameBuffer)
                    .applying(preferredTransform)
outputimage = outputimage.applying(CGAffineTransform(translationX: -outputimage.extent.origin.x,y: -outputimage.extent.origin.y))

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...