Avant de commencer, il nous faut en apprendre plus sur le format ACO. 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 ACO très simple, et on essaie de comprendre comment il est organisé.

J'ai choisi la seconde solution car je n'ai pas trouvé d'infos pertinentes sur le format ACO. J'ai utilisé Free Hex Editor pour lire mon fichier ACO de test.

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

Voici comment procéder:

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 swatch:String; // pour le nom de la couleur
var len:int = colorsArray.length; //je stocke le nombre de couleurs
aco.writeShort(1); // ceci représente la section 1 du fichier ACO
aco.writeShort(len); // j'écris mon nombre de couleurs 
var pix:uint
for (var i:int = 0; i < len; i++) //pour chacune des couleurs
{
	pix = colorsArray[i];
	aco.writeShort(0); // ceci semble être une sorte de déclaration de début de couleur
	aco.writeShort((pix >> 16 & 0xFF)); //on écrit la composante rouge
	aco.writeShort((pix >> 8 & 0xFF)); //on écrit la composante verte
	aco.writeShort((pix & 0xFF)); //on écrit la composante bleue
	aco.writeShort(0); // ceci semble être une sorte de déclaration de fin de couleur
}
aco.writeShort(2); // ceci représente la section 2 du fichier ACO
aco.writeShort(colorsArray.length); // j'écris mon nombre de couleurs 
for (var j:int = 0; j < len; j++) //pour chacune des couleurs
{
	pix = colorsArray[j];
	aco.writeShort(0); // ceci semble être une sorte de déclaration de début de couleur
	aco.writeByte((pix >> 16 & 0xFF));//on écrit la composante rouge
	aco.writeByte((pix >> 16 & 0xFF));// dans la section 2 il faut doubler les valeurs RGB
	aco.writeByte((pix >> 8 & 0xFF));//on écrit la composante vert
	aco.writeByte((pix >> 8 & 0xFF));// dans la section 2 il faut doubler les valeurs RGB
	aco.writeByte((pix & 0xFF));//on écrit la composante bleue
	aco.writeByte((pix & 0xFF));// dans la section 2 il faut doubler les valeurs RGB
	aco.writeShort(0); // ceci semble être une sorte de déclaration de fin de couleur
	aco.writeShort(0); // ceci aussi
	swatch="#"+uint(colorsArray[j]).toString(16);				
	aco.writeShort(swatch.length + 1); // j'écris la longueur du texte à venir
	var len2:int = swatch.length;
	for (var n:int = 0; n < len2; n++) //J'écris le code caractère de chaque lettre
		aco.writeShort(swatch.charCodeAt(n));
	aco.writeShort(0); // ceci semble être une sorte de déclaration de fin
}
//je sauve ensuite mon ByteArray dans un fichier
var file:FileReference = new FileReference();
file.save(aco, "AdobeColor.aco");

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...