2015-09-17 1 views
7

Xcodeの7に更新され、画像が作動してレンダリングされたときにこの(警告?)メッセージを得る:コンソールでメッセージを取得しています: "データ提供者がサポートするCGImageRefでCreateWrappedSurface()が失敗しました。"

CreateWrappedSurfaceは()のdataProvider担保CGImageRefに失敗しました。

Xcode 6.4では、このようなメッセージはありませんでした。

if (!self.originalImage) // @property (nonatomic, strong) UIImage *originalImage; 
     return; 

CGImageRef originalCGImage = self.originalImage.CGImage; 
NSAssert(originalCGImage, @"Cannot get CGImage from original image"); 
CIImage *inputCoreImage = [CIImage imageWithCGImage:originalCGImage]; // this results the console message 

私はUIImageから直接それを得るために、私CIIImageの作成者を置き換える:この場合

CIImage *originalCIImage = self.originalImage.CIImage; 
NSAssert(originalCIImage, @"Cannot build CIImage from original image"); 

私は任意のコンソールを取得していないコードの一部がメッセージを投げた

ガットメッセージは、しかし、アサルトを持っていた:originalCIImageは無かった。

UIImageのクラス参照は言う:(読み取り専用非アトミック)

@propertyをCIImage * CIImage

UIImageオブジェクトはCGImageRefを使って初期化された場合は、プロパティの値はnilです。

は、だから私は、フォールバックとして、元のコードを使用しています:

CIImage *originalCIImage = self.originalImage.CIImage; 
if (!originalCIImage) { 
    CGImageRef originalCGImageRef = self.originalImage.CGImage; 
    NSAssert(originalCGImageRef, @"Unable to get CGimageRef of originalImage"); 
    originalCIImage = [CIImage imageWithCGImage:originalCGImageRef]; 
} 
NSAssert(originalCIImage, @"Cannot build CIImage from original image"); 

問題がある、私はまだ、コンソールに警告メッセージを取得です。

誰もこのメッセージを受け取っていませんか?その警告(?)メッセージを守るための解決策は何ですか?

おかげで、 アダム

+0

私はCIFilterをバックグラウンドスレッドで実行すると、(iOS9)これを得るのが始まったのは遅いためです(またautoReleasePoolの中で)。どんな悪影響も引き起こさないように見えましたが、そのメッセージそのものですが、私はまだ答えを探しています。 –

+0

私はそれだけでも、デバイス上ではなく、シミュレータでそれを得るようです。 Hmmm –

+0

画像をRGBからRGBAに変換する –

答えて

8

は最後に答えを考え出しました。私はCIImageがどのように動作するかにアップ勉強エラー(https://uncorkedstudios.com/blog/image-filters-with-core-graphics

ことで好奇心旺盛な私はCGImageは私がにロードしていますことを自分自身に考えたCGImageRefは、あらかじめ乗算値(RGBおよびA)

でのdataProvider担保されていることに気づきましたCIImage([CIImage imageWithCGImage:originalCGImage];はRGBのみでRGBAは使用しない)。確かに、標準UIGraphicsBeginImageContextWithOptionsを使用してビューのスナップショットを撮ってこのイメージを作成していましたが、不透明パラメータを "YES"に設定しました。

私は単に変更:

UIGraphicsBeginImageContextWithOptions(bounds, NO, 1.0f);

UIGraphicsBeginImageContextWithOptions(bounds, YES, 1.0f);

を私は今、RGBAイメージではなく、RGBの画像を作成していますように。

私はCGImageをCIImageに変換しました.CIImage NOWは適切なdataproviderバッキングを持っており、エラーは消えてしまいます。


私はガウスぼかしの目的のためにCIClampフィルタを使用して、クランプは、同様に効果的に機能しませんNOに不透明なセットでました。

+0

アドバイスありがとう!これは警告/エラーメッセージを回避する唯一の方法ですか?私は、CIContextとCIFilter(s)を操作に使用していて、このメソッドでCGContextを持ってきているのは、オーバーヘッドのような感じです。 –

+0

@AdamSzaboそれでもすべてを行うことができます。CGContextが不透明ではなくアルファチャンネルを持っていることを確認してください。 –

関連する問題