2017-01-18 4 views
1

AVCaptureSessionのピクセルバッファから作成されたCIImageにフィルタを適用して、カメラロールに保存しようとしています。CIImageをカメラロールに保存できません - Swift 3

ここに私のコードは

 let image = CIImage(cvPixelBuffer: pixelBuffer) 

     let filter = CIFilter(name: "CISepiaTone") 
     filter?.setValue(image, forKey: kCIInputImageKey) 
     filter?.setValue(0.1, forKey: kCIInputIntensityKey) 

     let newImage = UIImage(ciImage: (filter?.outputImage)!) 

     print ("new image: \(newImage)") 

     UIImageWriteToSavedPhotosAlbum(newImage, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil) 

だ。これは、エラーをスローしない、とイメージ(_:didFinishSavingWithError:contextInfoは:)それは

をエラーしていないと呼ばれているが、画像がマイライブラリに表示されません。とても混乱するような!どんな助けもありがたい。

ありがとうございました。

+0

書き込み権限がありますか? – NSDmitry

+0

はい書き込み許可はOKで、私はすでに通常のuiimageから書き込むことができました。 –

+0

フィルタリングされたCIImageを作成するコードの行を分解してください(そして、UIImageに変換することに伴って強制解除されます)。実際にフィルタから何らかの出力が得られているかどうかを確認してください。また、イメージイメージがどのように見えるかを見てください。 CIfiltersは正しく設定されていればエラーを返すことはありませんが、代わりに価値のない出力が得られます。 – dfd

答えて

0

私も同じ状況でこの問題に直面し、解決しました。

私の方法は、最初にCGImageに変換し、CGImageオブジェクトをUIImageに変換します。この場合、処理された画像をカメラロールに保存することはできますか?

ここにコードがあります。

let input = CIImage(image: MyImageView.image!) 
let filter = PinkyFilter() // My custom filter 
filter.setValue(input, forKey: kCIInputImageKey) 
let context = CIContext() // Prepare for create CGImage 
let cgimg = context.createCGImage(filter.outputImage, from: filter.outputImage.extent) 
let output = UIImage(cgImage: cgimg!) 

出力は保存可能なオブジェクトです。

関連する問題