# Core Image

Core Image est une interface de programmation précise et non destructive dédiée au traitement et à l'affichage dans Mac OS X. Faisant partie du framework QuartzCore, il étend les capacités d'affichage de Quartz avec son architecture à base de plugiciels pour gérer les filtres et autres effets$^,$.

## Détails

Core Image est conçu pour abstraire les manipulations d'images aux logiciels sans nécessiter de code dédié à chaque matériel. Core Image fonctionne en appliquant le traitement d'une (ou plusieurs) Image Unit à chaque pixel d'une image, créant ainsi le rendu d'une nouvelle image transformée. Chaque image unit définie un filtre, une transformation ou tout autre effet qui peut être appliqué au pixel de l'image d'origine sans modifier les données initiales. De cette façon, Image Units permet l'édition non destructive des images.
Comme les filtres Photoshop, un Image Unit peut être appliqué en parallèle d'autres. Core Image peut mettre en place une queue de traitement à la volée de telle sorte qu'un seul calcul soit appliqué au pixel pour rendre les multiples effets. Il en résulte que plusieurs Image Units peuvent être appliqués à une image sans nécessiter trop de temps de calcul supplémentaire. Core Image utilise un compilateur juste-à-temps pour créer le code qui effectue les opérations associées à une ou plusieurs Image Units de chaque pixel. Le code est alors exécuté soit par le processeur centrale soit par le processeur de la carte graphique, en fonction de celui qui peut exécuter le-dit code le plus rapidement.
Lorsqu'un processeur graphique compatible est disponible, le compilateur de Core Image génère un code en utilisant des instructions issue du langage OpenGL. Si le GPU supporte ce langage, il sera utilisé en priorité par Core Image. Si ce n'est pas le cas, le compilateur fonctionnera en mode dégradé en utilisant le processeur central, générant des instructions adéquates pour le processeur de l'ordinateur. Cette fonctionnalité utilise les capacités de calcul vectoriel des processeurs (graphiques ou centraux) et prend en charge les multi-processeurs. Les performances de Core Image dépendent donc de la capacité de gestion du langage OpenGL du processeur graphique ou de la puissance de calcul du processeur central. Avec un processeur graphique supporté, la plupart des effets peuvent être rendus en temps-réel ou avec un léger décalage par rapport au temps-réel.

## Histoire

Core Image est inclus depuis Mac OS X v10.4. Core Image Fun House et Quartz Composer, inclus les Developer Tools, l'utilisent. L' effet goutte d'eau du Dashboard utilise un filtre Core Image. Aperture est un exemple d'application qui utilise quasiment uniquement Core Image.

## Au pixel près

Tous les traitements de pixels fournit par une Image Unit sont effectués dans un espace de couleur alpha pré-multiplié, stoquant quatre canaux de couleur : rouge, vert, bleu et la transparence alpha. Chaque canal de couleur est représenté par un flottant de 32b. Ceci permet une profondeur de couleur exceptionnelle, grandement supérieure à ce qui peut être perçu par l'œil humain, chaque pixel étant représenté par un vecteur de 128b (quatre canaux de 32b). Pour les espaces colorimétriques moins profonds, le modèle de calcul à virgule flottante utilisé par Core Image est d'une performance exceptionnelle, ce qui est utile lors du traitement de plusieurs images (y compris les images fixes issues d'une vidéo)$^,$.

## Processeurs graphiques supportés

N'importe quel processeur graphique qui gère les commandes OpenGL nécessaires est capable de traiter les instructions Core Image. Apple a utilisé les cartes graphiques suivantes pour supporter Core Image en mode "commandes OpenGL"$^,$:
* ATI Mobility Radeon 9600, 9700, or X1600
* ATI Radeon 9550, 9600, 9650, 9600 XT, 9600 Pro, 9700 Pro, 9800 XT, and 9800 Pro
* ATI Radeon X600 XT, X600 Pro, X800 XT, X850 XT, X1600, X1900 XT
* NVIDIA GeForce FX 5200 Ultra, 6600, 6600 LE, 6800 Ultra DDL, and 6800 GT DDL
* NVIDIA GeForce 7300 GT, 7600 GT, and 7800 GT
* NVIDIA Quadro FX 4500
* NVIDIA GeForce 9400M
* NVIDIA GeForce 9600M GT
* Intel GMA 900
* Intel GMA 950
* Intel GMA X3100
Les processeurs graphiques capables d'être utilisés par Core Image peuvent aussi être utililsés par Quartz Extreme. Les besoins de Core Image sont plus grands que Quartz Extreme.

## Image Units

Mac OS X 10.4 inclut une centaine d' Image Unit en standard, y compris:
* Flous médian, gaussien, de bougé et de zoom
* Réduction de bruit
* Ajustement des couleurs : Exposition, gamma, saturation et balance des blancs
* Distorsions : pincement, trou, déplacement, vitre, tore, lentille, tourbillon
* Générateurs : scintillement d'étoile, rayon de soleil, damier, halo de lentille
* Décalage de couleur : brulé, foncé, delta, exclusion lumière dure, saturation, adoucissement, luminosité multiplication, surimpression
* Géométrie : découpe, mise à l'échelle, rotation, transformation affine
* Filtres de style, carreaux, demi-tons
* Transitions : balayage, flash, retournement de page, photocopieuse, désintégration et dissolution