#この文書について
以下に書かれた内容をSwiftで書きなおしただけです。
#やり方
CMSampleBuffer -> CVImageBufferRef -> CIImage -> CGImage -> UIImage
という順序で変換していくとUIImageが得られます。
##サンプルコード
//CMSampleBufferをUIImageに変換する
func UIImageFromCMSamleBuffer(buffer:CMSampleBuffer)-> UIImage {
// サンプルバッファからピクセルバッファを取り出す
let pixelBuffer:CVImageBufferRef = CMSampleBufferGetImageBuffer(buffer)!
// ピクセルバッファをベースにCoreImageのCIImageオブジェクトを作成
let ciImage = CIImage(CVPixelBuffer: pixelBuffer)
//CIImageからCGImageを作成
let pixelBufferWidth = CGFloat(CVPixelBufferGetWidth(pixelBuffer))
let pixelBufferHeight = CGFloat(CVPixelBufferGetHeight(pixelBuffer))
let imageRect:CGRect = CGRectMake(0,0,pixelBufferWidth, pixelBufferHeight)
let ciContext = CIContext.init()
let cgimage = ciContext.createCGImage(ciImage, fromRect: imageRect )
// CGImageからUIImageを作成
let image = UIImage(CGImage: cgimage)
return image
}
#注意
CGImageを飛ばしてCIImageからUIImageを作ることもできますが、このやり方では得られたUIImageからUIImageJPEGRepresentationを使ってJPG画像を作成すると戻り値がnilになってしまうのでCGImageを経由するのが良いと思われます。