2013-09-16 14 views
24

Xcodeをバージョン4.6.2から5.0に更新したばかりで、(Xcode 4.6.2で作成された)プロジェクトでメソッドを実行した後、突然コンパイラの警告が表示されます。 Xcodeの旧バージョンと新バージョンの両方でプロジェクトを再開しようとしましたが、同じ方法で4.6.2に警告が出ないことを確認しました。ここで CGBitMapContextCreateメソッドによりコンパイラの警告が発生するXcode 5ではなくXcode 4

はXcodeの5.0で警告を誘発するコードの行です:

CGContextRef context = CGBitmapContextCreate(NULL, frame.size.width * scaleFactor, frame.size.height * scaleFactor, 8, frame.size.width * scaleFactor * 4, colorSpace, kCGImageAlphaPremultipliedFirst); 

、警告は言う:

"Implicit conversion from enumeration type 'enum CGImageAlphaInfo' to different enumeration type 'CGBitMapInfo' (aka 'enum CGBitMapInfo')" 

非推奨の警告ではありませんが、私はないです意味を解釈したり、それを解決する方法を知ったりするために、これらのクラスに十分に精通しています。どんな助けもありがとうございます。

+14

あなたは '(CGBitmapInfo)kCGImageAlphaPremultipliedFirst'で' kCGImageAlphaPremultipliedFirst'を置き換えることができます:それはそれが何であるかだから

正解は、CGBitmapInfoにあなたのアルファ列挙型の値をキャストすることです。 – Rob

+2

http://stackoverflow.com/questions/17245787/how-do-i-create-an-alpha-only-bitmap-context/17246355#17246355 – rmaddy

+0

こちらをご覧ください、ありがとう! – jac300

答えて

37

kCGImageAlpha*列挙値は、CGBitmapInfoの最初の5ビットを埋めるものとします。しかし、C型システムではこれを表現することができないため、型を意図したとしても型が一致しないという警告が表示されます。

(CGBitmapInfo)kCGImageAlphaPremultipliedFirst 
6

agooldenが新しいXCode警告の意図によって、これらの列挙型で異なるマスクを使用してさまざまなフラグを構築および連結するように指示していることをご了承ください。https://github.com/inkling/Subliminal/issues/23だからではなく、ただkCGImageAlphaPremultipliedFirstを使用しての、(kCGBitmapAlphaInfoMask & kCGImageAlphaPremultipliedFirst)

を使用

警告は、この変更後に消えます。

+0

その式は型情報だけを破棄し、間違って問題を解決します(暗黙的にCGBitmapInfoに暗黙的にアップキャストすることによって)。(kCGmageAlphaPremultipliedFirstはすでにkCGBitmapAlphaInfoMaskで設定されたビットしか含んでいません。だから、ラウンドアバウトのやり方で動作するジャンクコードです。キャストしたい場合は、代わりにキャストしてください。 – nevyn

+3

@nevyn: 'kCGBitmapAlphaInfoMask'を含めても引数の値は変更されませんが、このメソッドは' CGBitmapInfo'を求めていますので、その列挙型の値を使うといいと思います。これは、確かに、私が本当に提供しているのは 'CGBitmapInfo'であることを私自身と将来の保守者に思い出させる文法的決定であり、ビットマップ情報のビットが他にもあります。アルファ情報についておそらく、キャストはそのリマインダにも役立ちますが、明示的に 'CGBitmapInfo'の値を使用するよりも啓蒙的ではないと感じています。 –

+0

申し訳ありませんが、それは良い議論です。私はdownvoteを変更することはできませんが、それはロックされています:( – nevyn

関連する問題