将32位RGBA缓冲区保存到.png文件中(Cocoa OSX)

时间:2010-02-17 00:16:06

标签: cocoa macos buffer cocotron

我需要将像素编辑器应用程序的内容保存到.png文件中,但我无法找到实现此目的的最佳方法。像素数据存储在32位RGBA缓冲器中。任何人都可以建议我可以使用任何好工具来完成这个任务吗

编辑: 不幸的是,cocotron不支持CGImage和representationUsingType:我需要能够将我的应用程序定位到PC版本,有人能建议第三种方法来完成这项任务吗?

2 个答案:

答案 0 :(得分:5)

NSBitmapImageRep应该能满足您的需求。将数据加载到NSBitmapImageRep 然后使用representationUsingType:properties:将其作为PNG发布。一个简单的例子:

NSBitmapImageRep *imageRep = 
    [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:imageBuffer
                                            pixelsWide:imageWidth
                                            pixelsHigh:imageHeight
                                         bitsPerSample:8
                                       samplesPerPixel:4
                                              hasAlpha:YES
                                              isPlanar:NO
                                        colorSpaceName:NSDeviceRGBColorSpace
                                          bitmapFormat:NSAlphaFirstBitmapFormat
                                           bytesPerRow:imageWidth * 4
                                          bitsPerPixel:32];
NSData *pngData = [imageRep representationUsingType:NSPNGFileType 
                                         properties:propertyDictionary];

如果您不能使用这些Cocoa方法,请查看libpng

答案 1 :(得分:2)

从像素数据创建CGImage并将其提供给CGImageDestination

发布之前不要忘记finalize the destination。这一步是强制性的,很容易忘记。