2017-06-15 6 views
0

Je cherche un moyen d'inspecter les données de profil de couleur ICC fournies par la méthode copyICCData() de CGColorSpace. Plus précisément, je charge des images PNG dans UIImage s sur iOS, et j'essaie de trouver un moyen d'utiliser le let iccData:CFData? = aUIImage.cgImage!.colorSpace!.copyICCData() pour déterminer le gamma pour le fichier image. Ceci est pour un jeu qui utilise le rendu 3D - si l'image source a un gamma 2.2 standard, je vais charger les données d'image dans une texture comme sRGB (par exemple MTLPixelFormatRGBA8Unorm_sRGB) et si elle a un gamma de 1,0 je vais plutôt le charger comme une texture linéaire (par exemple MTLPixelFormatRGBA8Unorm).Inspecter les données de profil de couleur ICC CGColorSpace sur iOS

Note: La solution de simplement passer un UIImage/CGImage au système de rendu (SceneKit/métal) et de le laisser faire le tri ne fonctionnera pas ici parce que: 1. Une partie du rendu que je fais est l'assemblage Des images 2D dans une texture 3D, donc c'est quelque chose que je dois faire avec des données brutes, pas quelque chose que je peux juste lire à partir d'un format de fichier image standard; 2. J'essaie spécifiquement de transmettre des images gamma-1.0 dans le système de rendu pour éviter le surcoût de la conversion linéaire sRGB → (le rendu est dans l'espace linéaire). En outre: Les solutions d'analyse ICC manuelle, les solutions utilisant l'API Apple et les suggestions de bibliothèque open source sont toutes des réponses acceptables. Il ne s'agit pas spécifiquement d'une requête de recommandation d'outil - toute solution qui fonctionnera est bonne - mais dans mes recherches, l'analyse manuelle d'ICC serait lourde et les API d'Apple ne semblent pas exposer les propriétés d'ICC. Donc, je crois que la réponse la plus probable est un pointeur vers une bibliothèque que je n'ai pas trouvé via Google ou GitHub ou CocoaPods ou StockOverflow, et je serai heureux d'accepter.

Répondre

0

Votre meilleur pari est d'utiliser l'exemple icc 'https://sourceforge.net/projects/sampleicc/'. Obtenez simplement les données de profil comme vous l'avez décrit, puis utilisez OpenIccProfile pour le charger. De là, obtenez une référence à la structure d'en-tête (.m_Header) et tirez les informations dont vous avez besoin. Je vous recommande également de jeter un coup d'œil à RefIccMax 'https://github.com/InternationalColorConsortium/RefIccMAX' qui est une version plus récente de la même lib, mais qui n'est pas prête pour la prime time.