FlashPix
# FlashPix

FlashPix (ou .fpx) est un format de fichier d'images planes dont la particularité est de stocker l'image a de multiples résolutions, sous forme de "tuiles". Le résultat est un fichier plus gros qu'une image JPEG habituelle, mais qui permet le transfert (et le stockage en mémoire) uniquement de la résolution (et des pixels nécessaires).

## Historique

FlashPix est une extension du format IVUE, utilisé par les logiciels Live Picture (Live Picture Inc) et LivePix. En 1995, un consortium composé de Eastman Kodak (PhotoCD), Microsoft, Hewlett-Packard, and Live Picture Inc se créa afin de permettre aux ordinateurs "simples" de traiter les grosses images (+ de 10 Mega Pixels). La solution de Live Picture (IVUE) le permettait, et le format fut adapté aux nécessités de chaque intervenant (documents structured storage de Office par exemple). Eastman Kodak proposa la version FlashPix de ses fichiers sur les PhotoCD.

## Technique

Les images FlashPix ont l'extension .fpx et utilisent le format structured storage de Microsoft qui permet de stocker des informations hiérarchique dans un seul fichier binaire.

Chaque image contient donc un en-tête de description, incluant les informations EXIF, la taille de l'image complète, ainsi que la taille des tuiles utilisées (par défaut 64 dans FlashPix, et 256 dans IVUE). Les sous-résolutions sont obtenues en divisant par 2 la résolution précédente, jusqu'à obtenir l'image complète dans une et unique tuile. Une sous-résolution peut être "manquante", ou partiellement manquante (et doit donc être générée à la volée en utilisant les résolutions plus grosses). Chaque tuile peut être compressée indépendamment des autres tuiles en utilisant divers algorithmes (LZH, JPEG, RLE, Wavelets, ...). À l'intérieur d'une tuile, chaque pixel peut avoir un nombre variable de canaux (par exemple 16bits CMYK, ou 10bits RGB), entrelacés ou non, avec un canal d'opacité prémultiplié ou non.

À compression identique, le fichier global est plus gros que l'image originelle d'environ 33 %. Mais c'est compensé par la rapidité d'accès à l'information.

Prenons l'exemple d'une image CMYK 16bits de 10200 par 7650 pixels. Le fichier (non compressé) utilisera 595MO.

FlashPix va stocker:

* L'image originelle: 10200x7650 pixels, soit 160x120 tuiles (~ 595MO).
* Sous-resolution 1: 5100x3825 pixels, soit 80x60 tuiles (~ 149MO)
* Sous-resolution 2: 2550x1913 pixels, soit 40x30 tuiles (~ 37MO)
* Sous-resolution 3: 1275x957 pixels, soit 20x15 tuiles (~ 9MO)
* Sous-resolution 4: 638x479 pixels, soit 10x8 tuiles (~ 2.3MO)
* Sous-resolution 5: 319x240 pixels, soit 5x4 tuiles (~ 598KO)
* Sous-resolution 6: 160x120 pixels, soit 3x2 tuiles (~ 150KO)
* Sous-resolution 7: 80x60 pixels, soit 2x1 tuiles (~ 37.5KO)
* Sous-resolution 8: 40x30 pixels, soit une seule tuile (~ 9KO)

Taille totale du fichier : ~ 793MO

Sur un écran "FullHD" 1920x1080... Avec un fichier classique, les 595MO devront être lus, et traités pour la mise à l'échelle. Avec FlashPix, dans le pire des cas, on aura besoin de 59x34 tuiles, soit 63 MO seulement à lire et traiter, soit 10 fois moins. Cela veut aussi dire, qu'un logiciel peut conserver en mémoire une trentaine de ces images (sur 2 GO), alors qu'avec un fichier "classique", seul 3 images pourront être lues. La différence se fait aussi sentir à la simple lecture, avec un SSD (200MO/s), le fichier originelle nécessitera 3s de chargement pour affichage, alors que l'image FlashPix n'utilisera qu'une demi seconde.

## Implémentation

FlashPix était proposé clés en main avec une bibliothèque de fonction assurant la complète transparence du système de tuiles et de résolution. Les fonctions permettait de définir une « vue » de l'image, avec une résolution (taille de la vue), une position (un quadrilatère défini par une matrice), un profil de couleur (luminosité, contraste, ...), et divers autres paramètres (opacité prémultipliée ou non, etc.). La bibliothèque se chargeait alors de remplir l'image de destination.

