Ecrire sur un fichier image le contenu d'une vue

Philippe49Philippe49 Membre
10:42 modifié dans API AppKit #1
Voilà  le code que j'utilises
<br />		NSBitmapImageRep * bitmapImageRep=[self bitmapImageRepForCachingDisplayInRect:[self bounds]];<br />		NSDictionary * properties=[NSDictionary dictionaryWithObjectsAndKeys:<br />					[NSNumber numberWithFloat:1.],NSImageCompressionFactor,<br />					[NSColorSpace deviceRGBColorSpace],NSImageColorSyncProfileData,<br />					nil										 <br />		];<br />		NSData* data=[bitmapImageRep representationUsingType:NSJPEGFileType properties:properties];<br />		[data writeToFile:path atomically:YES];<br />


et j'obtiens la vue à  la bonne taille, mais vide de son contenu ...  :-\\  :(  ??? ::)


Réponses

  • Philippe49Philippe49 Membre
    10:42 modifié #2
    Oh c'était tout bête, la méthode bitmapImageRepForCachingDisplayInRect ne fait que "réserver" un NSBitmapImageRep, il faut après effectivement le remplir :
    [self cacheDisplayInRect:[self bounds] toBitmapImageRep:bitmapImageRep];


    Reste quand même une question fondamentale : la technique ci-dessus est-elle "la belle méthode" ? 
  • fouffouf Membre
    août 2008 modifié #3
    J'avais fait un petit truc pour le forum à  ce sujet - OCTrucEtAstuces (voir dans la catégorie de NSView).

    Voila un exemple :
    <br />- (NSData *)dataWithPNGInsideRect:(NSRect)rect<br />{<br />	NSImage *image;<br />	NSData *data;<br />	image = [[NSImage alloc] initWithSize:rect.size];<br />	<br />	[image lockFocus];<br />	[self drawRect:rect];<br />	[image unlockFocus];<br />    <br />	data = [image TIFFRepresentationUsingCompression:NSTIFFCompressionLZW factor:15.0]; // ici, je ne me souviens plus de l&#39;utilité de mettre une compression<br /> 	NSBitmapImageRep *imageRep = [[NSBitmapImageRep alloc] initWithData:data];<br />	data = [imageRep representationUsingType:NSPNGFileType properties:nil];<br />	[image release];                  <br />	[imageRep release];<br />	<br />	return data;	<br />}<br />
    


    Ce code marche nickel chrome ;)
  • Philippe49Philippe49 Membre
    10:42 modifié #4
    Merci pour le lien, Fouf.
    Tu redessines dans une NSImage, et tu transformes ensuite.
    Bon cela fait deux codes pour la même chose. Avec la correction, celui-ci aussi marche :

    NSBitmapImageRep * bitmapImageRep=[self bitmapImageRepForCachingDisplayInRect:[self bounds]];<br />	[self cacheDisplayInRect:[self bounds] toBitmapImageRep:bitmapImageRep];<br />	NSDictionary * properties=[NSDictionary dictionaryWithObjectsAndKeys:<br />			[NSNumber numberWithFloat:1.],NSImageCompressionFactor,<br />			[NSColorSpace deviceRGBColorSpace],NSImageColorSyncProfileData,<br />			nil										 <br />	];<br />	NSData* data=[bitmapImageRep representationUsingType:NSJPEGFileType properties:properties];<br />	[data writeToFile:path atomically:YES];
    

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