iOS
画像処理
カメラ
Swift

CMSampleBufferをUIImageに変換する(Swift)

More than 3 years have passed since last update.


この文書について

以下に書かれた内容をSwiftで書きなおしただけです。

- http://qiita.com/hkato193/items/c0327e4c56ccf1c15e7d


やり方

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を経由するのが良いと思われます。


参考

http://qiita.com/hkato193/items/c0327e4c56ccf1c15e7d