【问题标题】:Error saving NSImage as NSData将 NSImage 保存为 NSData 时出错
【发布时间】:2010-02-26 09:54:21
【问题描述】:

我正在使用以下代码将一帧电影保存到我的桌面:

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

在代码的倒数第二行,我在控制台中收到以下消息,但没有结果保存到桌面:

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

NSImage 仍然是整个方法调用的分配对象,所以我不确定为什么会收到有关图像数量不足的投诉。

如果有任何帮助,我将不胜感激。 提前致谢, 瑞奇。

【问题讨论】:

    标签: objective-c cocoa nsdata nsimage


    【解决方案1】:

    我认为问题的根源是您将 NSCIImageRep 对象数组传递给representationOfImageRepsInArray:usingType:properties:,我认为它需要一个NSBitmapImageRep 对象数组。

    您要做的是从您的 CIImage 创建一个 NSBitmapImageRep。然后你可以用它来写入磁盘。大概是这样:

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

    当然,您希望处理任何错误情况,并可能传递一个属性字典来微调 JPEG 创建。

    【讨论】:

    • 非常感谢杰西。你的解决方案效果很好。 jib,也感谢你的帖子。当我们在这里时,有没有人知道在我们将图像保存到磁盘之前是否有一种方法可以水平翻转图像?再次感谢。瑞奇。
    【解决方案2】:

    很抱歉,我真的不知道为什么您的代码不起作用,但以不同的方式处理它(我认为比您的 CVImageBuffer 到 CIImage 到 NSCIImageRep 到 NSImage 到 NSData 更有效,尽管略低级别):-

    1. CVImageBuffer to CGImage
    2. CGImage to jpg file

    我没有准备好执行此操作的代码,但从这些示例中提取正确的内容应该是直截了当的。

    【讨论】:

      猜你喜欢
      • 2012-07-28
      • 2013-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      • 2011-08-11
      • 1970-01-01
      相关资源
      最近更新 更多