Question

Je suis en utilisant le code suivant pour enregistrer une image d'un film sur mon bureau:

NSCIImageRep *imageRep = [NSCIImageRep imageRepWithCIImage:[CIImage imageWithCVImageBuffer:imageBuffer]];
NSImage *image = [[[NSImage alloc] initWithSize:[imageRep size]] autorelease];
[image addRepresentation:imageRep];
CVBufferRelease(imageBuffer);

NSArray *representations = [image representations];
NSData *bitmapData = [NSBitmapImageRep representationOfImageRepsInArray:representations usingType:NSJPEGFileType properties:nil];
[bitmapData writeToFile:@"/Users/ricky/Desktop/MyImage.jpeg" atomically:YES];

Lors de la dernière ligne de code, je reçois les messages suivants dans la console, sans résultat étant enregistré sur le bureau:

<Error>: CGImageDestinationFinalize image destination does not have enough images
CGImageDestinationFinalize failed for output type 'public.jpeg'

Le NSImage est encore un objet alloué à l'appel de toute méthode, donc je ne sais pas pourquoi je reçois des plaintes concernant une quantité insuffisante d'images.

Je vous remercie de toute aide. Merci d'avance, Ricky.

Était-ce utile?

La solution

Je pense que la source du problème est que vous passez un tableau d'objets NSCIImageRep à representationOfImageRepsInArray: usingType:. Propriétés :, que je crois attend un tableau d'objets NSBitmapImageRep

Qu'est-ce que vous voulez faire est de créer un NSBitmapImageRep de votre CIImage. Ensuite, vous pouvez l'utiliser pour écrire sur le disque. Ce serait à peu près:

CIImage *myImage = [CIImage imageWithCVImageBuffer:imageBuffer]; 
NSBitmapImageRep *bitmapRep = [[NSBitmapImageRep alloc] initWithCIImage:myImage];
NSData *jpegData [bitmapRep representationUsingType:NSJPEGFileType properties:nil];
[jpegData writeToFile:@"/Users/ricky/Desktop/MyImage.jpeg" atomically:YES];

Bien sûr, vous voudriez gérer tous les cas d'erreur et de passer probablement un dictionnaire de propriétés pour affiner la création JPEG.

Autres conseils

Je suis désolé, je ne sais pas vraiment pourquoi votre code ne fonctionne pas, mais approchant d'une manière différente (et je pense que plus efficacement que votre CVImageBuffer à CIImage à NSCIImageRep à NSImage à NSData, mais à un peu plus faible niveau): -

  1. CVImageBuffer à CGImage
  2. CGImage au fichier jpg

Je n'ai pas le code tout fait pour le faire, mais extraire l'étoffe de ces exemples devrait être simple.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top