[résolu] Comment faire un fichier de base, simple??

HerveHerve Membre
octobre 2011 modifié dans API AppKit #1
Bonjour,

Ma question est simple, mais je ne connais pas la classe concernée sous Cocoa. Sans doute est-ce une fonction en C?

Je voudrais créer des fichiers de palettes de couleurs de type Adobe act ou ase et pal. J'ai trouvé de la doc et du code source sur le Web, mais je ne vois pas quelle classe employer. NSString ou NSText ne semblent pas convenir. Je ne vois rien qui corresponde à  la classe File en Java.

Auriez-vous une idée?

Pour info, voici les docs trouvées :
Pour Adobe act :
http://blog.phiphou.com/index.php/?2010/10/08/178-flex-et-les-fichiers-act

pour PAL :
http://www.codeproject.com/KB/miscctrl/palettecolourpicker.aspx?display=Print

Réponses

  • HerveHerve Membre
    07:41 modifié #2
    Je vous dérange peut-être pour rien. Je viens de découvrir NSData...  ::)
  • CéroceCéroce Membre, Modérateur
    07:41 modifié #3
    Pour charger un fichier binaire, NSData est effectivement toute indiquée.
  • HerveHerve Membre
    07:41 modifié #4
    Merci Céroce.

    Pour le .pal, j'ai fait avec des string. le temps de retrouver que le retours chariot s'écrit avec un anti-slash, et cétait fait.

    Juste un problème avec NSData et NSMutableData : comment transforme t-on un int en data?? ou en byte??

    <br />[mesBytes appendData:255];<br />&nbsp; &nbsp; &nbsp;  //ou<br /> int rv = (int) floorf([uneCouleur redComponent]*255);<br /> [mesBytes appendData:rv];<br />
    


    XCode n'aime pas, et plante sur le deuxième. Bon, si vous connaissez le "truc", je suis preneur!

    Ceci dit, pas moyen de trouver un soft important du .pal pour tester. act, c'est photoshop, il y en a un ici. Mais l'autre??
  • CéroceCéroce Membre, Modérateur
    07:41 modifié #5
    NSData représente un flux d'octets.

    NSMutableData *data = [NSMutableData data];<br /><br />// Ajouter un octet<br />UInt8 octet = 255;<br />[data appendBytes:&amp;octet length:sizeof(UInt8)];<br /><br />// Ajouter un mot<br />UInt16 mot = 0xDEAD;<br />[data appendBytes:&amp;mot length:sizeof(UInt16)];
    


    À noter que l'ordre des octets (endianness) n'est évidemment pas géré.
  • HerveHerve Membre
    07:41 modifié #6
    Merci Ceroce.

    Ces UIInt8, et autres valeurs de ce genre, je commence à  les "fréquenter" dans Core Audio, mais je n'avais pas pensé à  elles.

    Mes fichiers d'export de act marchent grâce à  toi. Merci infiniment.

    En cadeau, la méthode complète (au cas où quelqu'un aurait besoin, histoire de dire merci) :

    - (IBAction) exporteFichierACT : (id) sender{<br />&nbsp; &nbsp; int valHarm = [paletteHarmonie valHarmonie];<br />&nbsp; &nbsp; NSMutableArray *palette256Couleurs = [[NSMutableArray alloc]initWithArray:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [leDessin donneTableau256Couleurs:valHarm]]; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //méthode appelant 256 couleurs à  partir de la palette utilisée dans le dessin.<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; NSMutableData *data = [NSMutableData data];<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; // Ajouter un octet<br />&nbsp; &nbsp; UInt8 octet = 255;<br />&nbsp; &nbsp; for (int i = 0; i &lt; 256; i++){<br />&nbsp; &nbsp; &nbsp; &nbsp; NSColor *uneCouleur = [palette256Couleurs objectAtIndex:i];<br />&nbsp; &nbsp; &nbsp; &nbsp; if (uneCouleur == [NSColor whiteColor]){<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [data appendBytes:&amp;octet length:sizeof(UInt8)];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [data appendBytes:&amp;octet length:sizeof(UInt8)];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [data appendBytes:&amp;octet length:sizeof(UInt8)];<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; else{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int rv = (int) floorf([uneCouleur redComponent]*255);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int gv = (int) floorf([uneCouleur greenComponent]*255);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int bv = (int) floorf([uneCouleur blueComponent]*255);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; UInt8 octetR = rv;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [data appendBytes:&amp;octetR length:sizeof(UInt8)];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; UInt8 octetG = gv;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [data appendBytes:&amp;octetG length:sizeof(UInt8)];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; UInt8 octetB = bv;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [data appendBytes:&amp;octetB length:sizeof(UInt8)];<br />&nbsp; &nbsp; &nbsp; &nbsp; }//fin du else <br />&nbsp; &nbsp; } //fin du for<br />&nbsp; &nbsp; UInt8 octetO = 0;<br />&nbsp; &nbsp; UInt8 octetE = 255;<br />&nbsp; &nbsp; [data appendBytes:&amp;octetO length:sizeof(UInt8)];<br />&nbsp; &nbsp; [data appendBytes:&amp;octetE length:sizeof(UInt8)];<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; [data appendBytes:&amp;octet length:sizeof(UInt8)];<br />&nbsp; &nbsp; [data appendBytes:&amp;octet length:sizeof(UInt8)];<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; NSSavePanel * savePanel = [NSSavePanel savePanel]; <br />	[savePanel setRequiredFileType:@&quot;act&quot;];<br />	[savePanel setCanCreateDirectories:YES];<br />	[savePanel setExtensionHidden:NO];<br />	int runResult = [savePanel runModal];<br />	if (runResult == NSOKButton){<br />&nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; [data writeToFile:[savePanel filename] <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  atomically:YES];<br />	}<br />}
    


    Ca marche, ça marche!!  :o
Connectez-vous ou Inscrivez-vous pour répondre.