Je dois enregistrer le contenu d'une application de traitement de pixels dans un fichier .png, mais je n'arrive pas à trouver le meilleur moyen d'y parvenir. Les données de pixel sont stockées dans un tampon RGBA 32 bits. Quelqu'un peut-il suggérer de bons outils que je pourrais utiliser pour accomplir cela? Malheureusement, CGImage et representationUsingType: ne sont pas supportés par cocotron et je dois aussi pouvoir cibler mon application pour la publication sur PC. Quelqu'un peut-il suggérer une troisième façon d'accomplir cette tâche?Enregistrement d'un tampon RGBA 32 bits dans un fichier .png (Cocoa OSX)
Répondre
NSBitmapImageRep
devrait vous apporter ce dont vous avez besoin. Chargez les données dans le NSBitmapImageRep
puis utilisez representationUsingType:properties:
pour le sortir en tant que PNG. Un exemple rapide:
NSBitmapImageRep *imageRep =
[[NSBitmapImageRep alloc] initWithBitmapDataPlanes:imageBuffer
pixelsWide:imageWidth
pixelsHigh:imageHeight
bitsPerSample:8
samplesPerPixel:4
hasAlpha:YES
isPlanar:NO
colorSpaceName:NSDeviceRGBColorSpace
bitmapFormat:NSAlphaFirstBitmapFormat
bytesPerRow:imageWidth * 4
bitsPerPixel:32];
NSData *pngData = [imageRep representationUsingType:NSPNGFileType
properties:propertyDictionary];
Si vous ne pouvez pas utiliser ces méthodes de cacao, consultez libpng
.
Créez un CGImage à partir des données de pixel et alimentez-le à CGImageDestination. Ne pas oublier de finalize the destination avant de le relâcher.
Cette étape est obligatoire et très facile à oublier.
Nous vous remercions de votre suggestion, mais il semble que CGImageCreate n'est pas supporté par clozure (il s'agit d'un lisp commun - cocoa bridge) pouvez-vous suggérer d'autres alternatives à votre méthode et celle listée ci-dessus. Merci pour votre aide! – Mike2012
Cela a fonctionné très bien mais malheureusement la méthode representationUsingType: n'est pas supportée par le cocotron, et je dois aussi pouvoir cibler le cocotron. Pouvez-vous suggérer d'autres façons d'accomplir cela? – Mike2012
@Michael, réponse éditée pour inclure une bibliothèque C qui vous aidera. –