2016-05-02 8 views
0

Swiftプレイグラウンドでは、JPEGを読み込んでUIImageに変換し、モノクロにフィルタリングしています。 その後、結果として得られたフィルタリングされた画像をUIImageに変換します。スイフトプレイグラウンド - フィルタリングされたUIImageをCGImageに変換できません

入力画像とフィルタ画像が正しく表示されます。

次に、両方のイメージをCGImageタイプに変換します。 これは、入力画像のために動作しますが、フィルタリングされた画像は、変換からnilを返します。

// Get an input image 
let imageFilename = "yosemite.jpg" 
let inputImage = UIImage(named: imageFilename) 
let inputCIImage = CIImage(image:inputImage!) 

// Filter the input image - make it monochrome 
let filter = CIFilter(name: "CIPhotoEffectMono") 
filter!.setDefaults() 
filter!.setValue(inputCIImage, forKey: kCIInputImageKey) 
let CIout = filter!.outputImage 
let filteredImage = UIImage(CIImage: CIout!)   

// Convert the input image to a CGImage 
let inputCGImageRef = inputImage!.CGImage   // Result: <CGImage 0x7fdd095023d0> 
// THE LINE ABOVE WORKS 

// Try to convert the filtered image to a CGImage 
let filteredCGImageRef = filteredImage.CGImage  // Result: nil 
// THE LINE ABOVE DOES NOT WORK 
// Note that the compiler objects to 'filteredImage!.CGImage' 

間違っているのですか?

+0

複製を? http://stackoverflow.com/questions/10022534/cgimage-of-uiimage-return-null –

+0

@BryanChen - これは同じ問題ですが、それはObjective Cの解決策です。 –

+0

だから、私はあなたの質問に投票を終わらせなかったのです。しかし、リンクはCGImageがゼロである理由を答えてくれます。 –

答えて

3

CIImageから作成されたUIImageは、CGImageによってサポートされていません。あなたが明示的に作成する必要があります。

let context = CIContext() 
let filteredCGImageRef = context.createCGImage(
    CIout!, 
    fromRect: CIout!.extent) 

あなたがUIImageが必要な場合は、CIContextによってレンダリングCGImageからそれを作成します。

UIImage(CGImage: filteredCGImageRef) 

乾杯、

サイモン可能

+0

パーフェクト - まさに私が必要としたもの。 –

関連する問題