Сохранение 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.
Не забудьте завершить пункт назначения, прежде чем отпустить его. Этот шаг является обязательным, и его очень легко забыть.