Pour réaliser cela, nous allons utiliser les possibilité de l'AS3 sur le traitement de données binaires. Vous allez voir, j'ai choisi l'exemple le plus simple. En effet, je vous montrerai très bientôt comment générer des fichiers .ASE, .ACO, etc.. mais commençons par le plus facile.

Avant de commencer, il nous faut en apprendre plus sur le format ACT. Pour cela, deux solutions : soit on parvient à trouver les spécifications du format, ou au moins des informations même non officielles, ou bien on tente de faire de l'ingénierie inversée, à savoir on ouvre dans un éditeur hexadécimal un fichier ACT très simple, et on essaie de comprendre comment il est organisé.

J'ai choisi la première solution, car en fouillant un peu sur la toile j'ai trouvé ce lien : http://www.giss.nasa.gov/tools/panoply/help/panoply_B.pdf.

Voici ce qu'on peut y lire :

An ACT file is in binary form and is at least 768 bytes long. If it is only 768 bytes, then it specifies exactly 256 colors. If it is longer (probably 772 bytes), then byte 769 specifies how many colors there are. Panoply ignores bytes 770-772 if they are present. The first 768 bytes of an ACT file are arranged as 256 triplets., each of which specifies the RGB value of a color. Bytes 1-3 define the first color, with byte 1 specifying its red value, byte 2 the green value and byte 3 the blue value. Bytes 4-6 define the second color, and so on until the correct number of colors is reached. Any remaining bytes are ignored.

Moi je souhaite réaliser une palette avec les 5 couleurs suivantes : #FF0000, #00FF00, #0000FF, #FFFF00, et #00FFFF.

Je vais donc devoir écrire un fichier qui va contenir 256 couleurs, mes 5 couleurs plus 251 (256-5) couleurs. Enfin, je rajouterai à la fin le nombre de couleur, ici 5.

var pix:uint;
var act:ByteArray=new ByteArray(); //Je prépare mon ByteArray de sortie.
//mes 5 couleurs, de type uint
var colorsArray:Array= [0xFF0000,0x00FF00,0x0000FF,0xFFFF00,0x00FFFF];
var len:int=colors.length; //je stocke le nombre de couleurs
for (var i:int=0; i < len; i++) //pour chacune des couleurs
{
	pix=colorsArray[i];
	act.writeByte((pix >> 16 & 0xFF)); //on écrit la composante rouge
	act.writeByte((pix >> 8 & 0xFF)); //on écrit la composante verte
	act.writeByte((pix & 0xFF)); //on écrit la composante bleue
}
//je remplis ensuite les 251 couleurs restantes, en noir
len = 256-len;
for (var j:int=0; j < len; j++)
{
	act.writeByte(0);
	act.writeByte(0);
	act.writeByte(0);
}
act.writeByte(0); // ceci semble être une sorte de séparateur...
act.writeByte(5); // j'écris mon nombre de couleurs 
//ceci semble être une sorte de fin de fichier...
act.writeByte(255);
act.writeByte(255);
//je sauve ensuite mon ByteArray dans un fichier
var file:FileReference=new FileReference();
file.save(act, "colorTable.act");

Et voila, ce n'est pas plus compliqué que ça. Voici donc un petit exemple,

;

ainsi qu'une vidéo pour montrer que tout marche bien.

Texte de remplacement


A très bientôt pour de nouvelles aventures...