PNG データ プロバイダーから CGImage を作成し、それを CGBitmapContext に描画するコードがあります。ほとんどの PNG は問題なく動作しますが、一部の PNG 形式はサポートされていないため (こちらを参照)、NULL コンテキストが取得されます。作成方法は次のとおりです。
CGContextRef imageContext = CGBitmapContextCreate(NULL, width, height, CGImageGetBitsPerComponent(image), 0, CGImageGetColorSpace(image), CGImageGetBitmapInfo(image));
この方法は Core Graphics では機能しませんが、同じ PNG で UIImage を作成すると機能します。また、指定された PNG 形式が実際にサポートされていないことを手動で確認しました (24 bpp、8 bpc、RGB のみ (アルファ チャネルなし))。さらに、kCGImageAlphaPremultipliedFirst の CGBitmapInfo を渡すと機能します。
とにかく、迷子のPNGをレンダリングさせる方法があるようで、UIImageはこれを実装しています。しかし、ここで UIImage を実際に使用することはできません (バックグラウンド スレッドでビットマップを事前にレンダリングしたい)。したがって、質問 - Core Graphics ですべての PNG をレンダリングするための優れたヒューリスティックは何ですか? あるいは、同じ効果を実現するために (コア グラフィックスを使用せずに) 他にどのような描画手法を使用できますか?