Frage

Ich bin mit dem folgenden Code ein Bild eines Films auf meinem Desktop speichern:

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];

In der zweiten letzten Zeile Code, erhalte ich folgende Meldungen in der Konsole, ohne Ergebnis auf den Desktop gespeichert werden:

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

Die NSImage ist immer noch ein reserviertes Objekt für die gesamte Call-Methode, also bin ich nicht sicher, warum ich Beschwerden über unzureichende Menge an Bildern empfange.

würde ich jede Hilfe dankbar. Danke im Voraus, Ricky.

War es hilfreich?

Lösung

Ich denke, die Ursache des Problems ist, dass Sie eine Reihe von NSCIImageRep vorbei sind Objekte zu representationOfImageRepsInArray: usingType. Eigenschaften :, die ich glaube, erwartet ein Array von NSBitmapImageRep Objekte

Was Sie tun möchten, ist eine NSBitmapImageRep von Ihrem CIImage zu erstellen. Dann können Sie verwenden, um die Platte zu schreiben. Das wäre in etwa:

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];

Natürlich würden Sie wollen alle Fehlerfälle behandeln und wahrscheinlich ein Eigenschaften Wörterbuch Feinabstimmung der JPEG Schöpfung übergeben.

Andere Tipps

Es tut mir leid ich weiß wirklich nicht, warum Ihr Code nicht funktioniert, aber es eine andere Art und Weise nähern (und ich denke, effizienter als Ihr CVImageBuffer zu CIImage zu NSCIImageRep zu NSImage zu NSData, wenn auch auf einem etwas niedrigeren Ebene): -

  1. CVImageBuffer zu CGImage
  2. CGImage zu jpg-Datei

Ich habe keinen Code bereit gemacht, dies zu tun, aber das Zeug aus diesen Beispielen zu extrahieren sollte einfach sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top