Как создать CGImageRef из NSBitmapImageRep?
Как я могу создать CGImageRef
из NSBitmapImageRep
? Или как я могу определить совершенно новый CGImageRef
так же, как NSBitmapImageRep
? Определение NSBitmapImageRep
работает отлично. Но мне нужно изображение как CGImageRef
,
unsigned char *plane = (unsigned char *)[data bytes]; // data = 3 bytes for each RGB pixel
NSBitmapImageRep* imageRep = [[NSBitmapImageRep alloc]
initWithBitmapDataPlanes: &plane
pixelsWide: width
pixelsHigh: height
bitsPerSample: depth
samplesPerPixel: channel
hasAlpha: NO
isPlanar: NO
colorSpaceName: NSCalibratedRGBColorSpace
//bitmapFormat: NSAlphaFirstBitmapFormat
bytesPerRow: channel * width
bitsPerPixel: channel * depth
];
Я понятия не имею, как создать CGImageRef
от NSBitmapImageRep
или как определить новый CGImageRef
:
CGImageRef imageRef = CGImageCreate(width, height, depth, channel*depth, channel*width, CGColorSpaceCreateDeviceRGB(), ... );
Пожалуйста, кто-нибудь может дать мне подсказку?
2 ответа
Самый простой способ - с помощью CGImage
свойство (введено в 10.5):
CGImageRef image = imageRep.CGImage;
Документация:
Возвращаемое значение
Возвращает автоматически освобожденный непрозрачный тип CGImageRef на основе текущих данных растрового изображения получателя.
обсуждение
Возвращенный CGImageRef имеет размеры в пикселях, которые идентичны размерам получателя. Этот метод может вернуть ранее существующий непрозрачный тип CGImageRef или создать новый. Если получатель позднее изменяется, последующие вызовы этого метода могут возвращать различные непрозрачные типы CGImageRef.
Судя по фрагменту кода, вы начинаете с NSData
объект. Итак, ваш вопрос, кажется, как создать CGImage
из объекта данных. В этом случае нет причин проходить NSBitmapImageRep
,
Вы были почти там с призывом CGImageCreate()
, Вам просто нужно выяснить, как поставить CGDataProvider
к этому. Вы можете создать CGDataProvider
из NSData
довольно прямо, как только вы поймете, что NSData
бесплатно соединяется с CFData
, Так:
CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);
CGColorSpaceRef colorspace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB);
CGImageRef image = CGImageCreate(width, height, depth / 3, depth, channel*width, colorspace, kCGImageAlphaNone, provider, NULL, TRUE, kCGRenderingIntentDefault);
CGDataProviderRelease(provider);
CGColorSpaceRelease(colorspace);