web-dev-qa-db-ja.com

CGBitMapContextCreateメソッドにより、コンパイラ警告Xcode4ではなくXcode5が発生します

Xcodeをバージョン4.6.2から5.0に更新したところ、プロジェクトでメソッド(Xcode 4.6.2で作成)を実行した後、突然コンパイラーに警告が表示されました。 Xcodeの古いバージョンと新しいバージョンの両方でプロジェクトを再度開いてみましたが、4.6.2では同じ方法で警告が表示されないことを確認しました。

Xcode5.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')"

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

24
jac300

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

正しい解決策は、アルファ列挙値をCGBitmapInfoにキャストすることです。これは、次のとおりです。

(CGBitmapInfo)kCGImageAlphaPremultipliedFirst
37
nevyn

コメントを見た https://github.com/inkling/Subliminal/issues/2 aegoldenによると、新しいXCode警告の意図は、これらの列挙型で異なるマスクを使用して構築するように指示している可能性があります。さまざまなフラグを連結します。したがって、kCGImageAlphaPremultipliedFirstを使用する代わりに、

(kCGBitmapAlphaInfoMask&kCGImageAlphaPremultipliedFirst)

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

6
CodeBrew