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
- 1. glBlendFunc() avec des textures RGBA 32 bits
- 2. Chargement PNG 32 bits dans .NET
- 3. Comment convertir l'image RGBA 32 bits en alpha dégradé
- 4. Chargement d'un processus 32 bits dans un environnement 64 bits
- 5. Cocoa App ne démarre pas sur Intel 32 bits?
- 6. Double clic dans Cocoa OSX
- 7. Détection d'un jre 64 bits dans un navigateur 32 bits?
- 8. Cocoa/OSX UI tagging
- 9. python sur 32 bits
- 10. Comment convertir un fichier rpm 64 bits en fichier rpm 32 bits
- 11. Cocoa Emacs tampon d'impression
- 12. Comment détecter si une application Cocoa est 32 bits ou 64 bits?
- 13. Enregistrement COM avec WIX en 32 bits et 64 bits Windows
- 14. Transparent PNG dans NSView, Cocoa App
- 15. Xcode & 64 bits & 32 bits Question
- 16. Comment vérifier un tampon Z 32 bits à l'aide de Managed Direct3D?
- 17. L'iPhone OS 64 bits ou 32 bits?
- 18. Comment compiler un fichier binaire 32 bits sur une machine Linux 64 bits avec gcc/cmake
- 19. Exécution d'un fichier objet 32 bits sur un environnement 64 bits
- 20. Lecteur Flash 32 bits dans Safari 64 bits: comment?
- 21. Charger la bibliothèque DLL 32 bits dans l'application 64 bits
- 22. En Java, comment écrire une image java.awt.image.BufferedImage dans un fichier png 8 bits?
- 23. Compiling Python 3.1.1 32 bits
- 24. 32 bits unsigned int php
- 25. Instancier par programme un NSPopUpButtonCell dans Cocoa OSX
- 26. Compiler git pour linux 32 bits sur un hébergement partagé
- 27. Comment convertir .deb 64 bits fichier en .deb 32 bits fichier
- 28. quel mysql 32/64 bits
- 29. Exécution d'une éclipse 32 bits avec jvm 32 bits sur Windows 64bit
- 30. Installer Ruby 1.9.2 sur Mac OSX 10.6 avec la version 32 bits
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. –