Changer la taille d'une NSImage sans perdre ses propriétés

Bonjour,


 


Je travaille actuellement sur une application mac où la qualité des images est primordiale.


 


Il est donc important de conserver l'espace colorimétrique et surtout le profile de couleur.


 


J'y arrive sans problème mais je dois aussi faire un resize (désolé pour l'anglicisme) d'image si elle à  une taille supérieure à  1600x1600.


 


Pour cela j'utilise une nouvelle NSImage et je fais le resize dans cette même NSImage, mais du coup elle perd le profile de couleur puisque c'est une "copie". Je précise donc que le resize fonctionne, mais qu'il ne garde pas les propriétés de l'image (ce qui est normal vu la méthode que j'utilise).


 


Voici la fonction : 



-(NSImage*)resizeImage: (NSSize)newSize { // les valeurs de newSize sont bonnes
NSImage *smallImage = [[NSImage alloc] initWithSize: newSize];
[smallImage lockFocus];
[image setSize: newSize]; //image est l'image que je veux resize
[[NSGraphicsContext currentContext] setImageInterpolation:NSImageInterpolationHigh];
[image drawAtPoint:NSZeroPoint fromRect:CGRectMake(0, 0, newSize.width, newSize.height) operation:NSCompositeCopy fraction:1.0];
[smallImage unlockFocus];
return (smallImage);
}


J'ai aussi fait un post un peu plus détaillé sur stackoverflow : ici.


 


Ma question étant : comment resize une NSImage sans faire de copie (j'ai essayé setSize mais ça ne fonctionne pas, sur les serveur les images sont toujours trop grandes). Ou sinon, comment resize une NSImage en gardant toutes ses informations?


Merci  :)


 


Mots clés:

Réponses

  • MalaMala Membre, Modérateur

    Il suffit de recopier le proflle colorimétrique de l'image d'origine. Cherches du côté de NSImageColorSyncProfileData.


  • Salut,


     


    Merci pour ta réponse, mais je galère depuis tout à  l'heure.


     


    Je ne comprend pas comment utiliser NSImageColorSyncProfileData et je trouve la documentation très vague (ou je ne sais pas bien utiliser leur doc, c'est possible).


     


    Malgré ça j'arrive à  récupérer le profile de couleur et d'autres infos stocké dans un NSArray avec la méthode -(NSArray *) representation de  la classe NSImage, mais je bloque après : comment recopier ce profil? Comment l'utiliser?


     


    Merci et désolé pour ces questions, mais je me noie dans leur documentation  ::) 


  • MalaMala Membre, Modérateur

    Soit destImageRep la NSImageRep de destination et colorSyncProfileData la NSData récupérée via "valueForProperty:", cela donne  quelque chose du genre...



    [destImageRep setProperty:NSImageColorSyncProfileData withValue:colorSyncProfileData];

    :p


  • Merci beaucoup, ça marche du tonnerre !


     


    Désolé de répondre aussi tard mais je ne pouvais pas essayer avant.


     


    Merci en tout cas, j'ai beaucoup galérer dessus.


Connectez-vous ou Inscrivez-vous pour répondre.