2011-02-06 2 views
0

J'essaie de créer paletté image PNG (8 bits par pixel) qui utilise la palette RGBA (32 bits par entrée de palette) en utilisant Cocoa framework *.Créer et écrire PNG RGBA palettisé en utilisant NSImage

J'ai essayé quelques combinaisons pour la méthode [NSBitmapImageRep initWithBitmapDataPlanes:…]. Il semble créer bitmap approprié pour bitsPerSample:2bitsPerPixel:8.

Cependant, lorsque je tente d'écrire ce bitmap avec [NSBitmapImageRep representationUsingType:NSPNGFileType…] je reçois:

libpng error: Invalid bit depth for RGBA image 

Si j'essayer d'autres profondeurs de bits, puis-je obtenir 32 bits par pixel d'image (non palettisées).


*) Je sais que je pourrais simplement utiliser libpng, mais ce n'est pas une réponse que je suis à la recherche.

Répondre

2

2 bits par échantillon, 8 par pixel n'obtiendront pas un fichier PNG indexé - il créera, en théorie, un fichier PNG RVBA avec 2 bits par échantillon, comme il le suggère. Maintenant, une telle image a 256 valeurs de couleurs possibles par pixel (y compris le canal alpha) mais elle n'est pas indexée dans le sens d'avoir une table de recherche de couleurs. À ma connaissance, il n'y a aucun moyen de spécifier une palette de couleurs lors de l'utilisation NSBitmapImageRep. Vous devrez probablement utiliser libpng directement pour obtenir l'effet que vous voulez. (Au fait, peu importe si vous ne cherchez pas cette réponse, c'est toujours la réponse correcte à ce problème particulier et dire "non!" Ne changera pas l'univers autour de vous.)

Cependant, avant de faire cela, si vous nous dites pourquoi vous pensez/savez que vous avez besoin d'un fichier PNG indexé, nous pourrions être en mesure de vous orienter vers une solution meilleure ou plus simple.

+0

Oui, mais c'est pour un fichier * GIF *, pas un fichier * PNG *. Ce sont des animaux différents. –

+0

Il existe un moyen de spécifier la palette - il prend la propriété 'NSImageRGBColorTable'. J'ai trouvé l'astuce 2-bps * quelque part * expliquant comment faire fonctionner la sortie GIF (même si c'était peut-être faux - quel serait le réglage correct pour le GIF?). – Kornel

+0

Je connais PNG! = GIF. Mon argument était que cette classe supporte les palettes - les supports GIF le prouvent. – Kornel