मेरे पास एक ऐप है जो वाई चैनल को संसाधित करने के लिए केसीवी पिक्सेलफॉर्मैट टाइपइप 2020ppCbCr8BiPlanarFullRange प्रारूप में लाइव वीडियो कैप्चर करता है।kCVPixelFormatType_420YpCbCr8BiPlanarFullRange फ्रेम UIImage रूपांतरण
kCVPixelFormatType_420YpCbCr8BiPlanarFullRange द्वि-Planar घटक Y'CbCr 8 बिट: 4: 2: एप्पल के प्रलेखन के अनुसार 0, पूर्ण सीमा (लुमा = [0255] क्रोमा = [1,255])। baseAddr एक बड़े-एंडियन CVPlanarPixelBufferInfo_YCbCrBiPlanar संरचना को इंगित करता है।
मैं इन फ्रेमों में से कुछ को UIViewController में प्रस्तुत करना चाहता हूं, क्या कोई एपीआई केसीवीपीक्सेलफॉर्मैट टाइप 32_जीबीआरए प्रारूप में रूपांतरण करने के लिए है? क्या आप ऐप्पल द्वारा प्रदान की गई इस विधि को ट्यून करने के लिए कुछ संकेत दे सकते हैं?
// Create a UIImage from sample buffer data
- (UIImage *) imageFromSampleBuffer:(CMSampleBufferRef) sampleBuffer {
// Get a CMSampleBuffer's Core Video image buffer for the media data
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
// Lock the base address of the pixel buffer
CVPixelBufferLockBaseAddress(imageBuffer, 0);
// Get the number of bytes per row for the pixel buffer
void *baseAddress = CVPixelBufferGetBaseAddress(imageBuffer);
// Get the number of bytes per row for the pixel buffer
size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer);
// Get the pixel buffer width and height
size_t width = CVPixelBufferGetWidth(imageBuffer);
size_t height = CVPixelBufferGetHeight(imageBuffer);
// Create a device-dependent RGB color space
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
// Create a bitmap graphics context with the sample buffer data
CGContextRef context = CGBitmapContextCreate(baseAddress, width, height, 8,
bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);
// Create a Quartz image from the pixel data in the bitmap graphics context
CGImageRef quartzImage = CGBitmapContextCreateImage(context);
// Unlock the pixel buffer
CVPixelBufferUnlockBaseAddress(imageBuffer,0);
// Free up the context and color space
CGContextRelease(context);
CGColorSpaceRelease(colorSpace);
// Create an image object from the Quartz image
UIImage *image = [UIImage imageWithCGImage:quartzImage];
// Release the Quartz image
CGImageRelease(quartzImage);
return (image);
}
धन्यवाद!
आरजीबी में रूपांतरण सिर्फ एक मध्यवर्ती कदम है, हां। आपके समाधान के साथ समस्या यह है कि यह एपीआई आईओएस 5.0 में उपलब्ध नहीं है। ImageWithCVPixelBuffer नामक एक विधि है जिसे मैं इसके बजाय उपयोग कर सकता हूं, लेकिन जैसा कि मेरा मूल प्रारूप द्विपक्षीय है, मेरे पास दो पिक्सेल बफर हैं। :-(वैसे भी धन्यवाद! – zapador
क्षमा करें; मैंने सफारी में गलत पृष्ठ को बेवकूफ रूप से लोड किया था और आईओएस की बजाय सीआईएममेज के लिए ओएस एक्स प्रलेखन को देखकर वहां बैठा था। मैं एक नया उत्तर लिखूंगा। – Tommy
टॉमी, आपके कोड के लिए धन्यवाद यह कुछ बदलावों के साथ एक चैंप की तरह काम करता है। मैं आपके लिए वोट देना चाहता हूं लेकिन मेरे पास पर्याप्त प्रतिष्ठा नहीं है। – zapador