Сохранение 32-битного буфера RGBA в файл.png (Cocoa OSX)

Мне нужно сохранить содержимое приложения пиксельного редактора в файл.png, но у меня возникают проблемы с поиском наилучшего способа сделать это. Данные пикселей хранятся в 32-битном буфере RGBA. Кто-нибудь может предложить какие-нибудь хорошие инструменты, которые я мог бы использовать для достижения этой цели?

РЕДАКТИРОВАТЬ: К сожалению, CGImage и presentationUsingType: не поддерживаются Cocotron, и мне нужно иметь возможность ориентировать свое приложение также на выпуск ПК, может кто-нибудь предложить третий способ решения этой задачи?

2 ответа

Решение

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

Если вы не можете использовать эти методы какао, проверьте libpng,

Создайте CGImage из данных пикселей и передайте его в CGImageDestination.

Не забудьте завершить пункт назначения, прежде чем отпустить его. Этот шаг является обязательным, и его очень легко забыть.

Другие вопросы по тегам