2010-12-08 5 views
0

Je voudrais créer un bitmap en mémoire, définir certaines valeurs de pixels, puis enregistrer cette image sur le disque.cacao bitmap de rendu au fichier

Jusqu'à présent, j'ai l'NSBitmapImageRep:

image = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL 
               pixelsWide:width 
              pixelsHigh:height 
              bitsPerSample:8 
              samplesPerPixel:4 
                hasAlpha:YES 
                isPlanar:NO 
              colorSpaceName:NSDeviceRGBColorSpace 
               bytesPerRow:0 
               bitsPerPixel:0]; 

Ensuite, il suffit d'ajouter quelques pixels comme ceci:

NSColor *color = [NSColor colorWithDeviceRed:1.0 
             green:1.0 
             blue:1.0 
             alpha:1.0]; 


[image setColor:color 
      atX:x 
       y:y]; 

Et finalement enregistrer l'image (au format TIFF, ce qui est idéal, mais un bon start)

NSData* TIFFData = [image TIFFRepresentation]; 
[TIFFData writeToFile:@"/temp/image.tiff" atomically:YES]; 

L'image enregistrée à partir de ce code est actuellement vide et ne montre que quelques-uns pixels dans le coin supérieur gauche. Je ne suis pas sûr d'où viennent les roues, mais il semble évident que je sors dans le mauvais sens?

Répondre

0

Je ne suis pas sûr ce qui est exactement le problème avec votre échantillon, mais je voudrais aborder le problème comme celui-ci:

NSImage *image = [[NSImage alloc] initWithSize:NSMakeSize(width, height)]; 
[image lockFocus]; // All drawing commands until unlockFocus target this image. 
[[NSColor redColor] set]; 
NSRectFillUsingOperation(NSMakeRect(x, y, 1, 1), NSCompositeSourceOver); 
[image unlockFocus]; 
NSData *data = [image TIFFRepresentation]; 
[data writeToFile:@"/temp/image.tiff" atomically:YES]; 
[image release]; 
+0

Je donnerai ce un essai. Existe-t-il un moyen d'imprimer un seul pixel sans utiliser une opération de remplissage? Je suis sûr qu'il y a des frais généraux dans cette approche. – Nippysaurus

+0

Je ne pense pas. Mais si vous vous inquiétez de ce niveau de performance, "[image setColor: color atX: x y: y]" sera probablement trop lent. À ce stade, vous voudrez allouer vous-même les données de l'image bitmap en tant que tampon malloc et y écrire directement, puis créer le représentant de l'image et l'enregistrer immédiatement. –