MetalのテクスチャをPNGから読み込むところで、iPhone SEだけなぜかうまく動かない症状に遭遇。
はじめはシェーダプログラムのほうに問題があると思ったが、実はPNGを読み込んだCGImageの評価のほうに問題があった。
iOS9.3のせいかもしれないが、不思議なことにiPhone 6ではでていない模様。
具体的には
CGImageGetAlphaInfo(image);
が返す値がたいていの画像でkCGImageAlphaNoneSkipLastとなっているところが
kCGImageAlphaPremultipliedFirst
を返す画像があり、それがうまく評価できていなかった。
UIImage(CGImage)の画像に1ピクセルずつ効果を加えたい場合
や
CoreGraphicsでハマる
こちらが参考になる。
簡単にいうとRGBAの配置やARGBの配置、Alphaを評価するべきでない場合がありうるということらしい。
kCGImageAlphaPremultipliedFirst
という名前からみるとなんらかの値を掛ける必要があるんじゃないか?とは思ったがそれは必要なかった。
どういうことなんだろう。
kCGImageAlphaPremultipliedFirst
になる画像の特長は、画像全体が1つのAlpha値になっているということ。レイヤーで透明度を指定しそのまま保存した場合にそうなっていた。
ただし、Alpha=1.0のときはその限りにあらず。
よくわかんないけど。




2016年08月28日
[iOS]kCGImageAlphaPremultipliedLast
posted by みこあいさ at 12:30| iOS開発