2012-09-03 12 views
6

मैं इस तरह त्रुटि हो रही है मेरी कंसोल में:CGBitmapContextCreateImage त्रुटि

: CGBitmapContextCreate: अमान्य डेटा बाइट्स/पंक्ति: होना चाहिए कम से कम 1920 8 पूर्णांक बिट्स/घटक, 3 घटकों, kCGImageAlphaPremultipliedFirst के लिए। : CGBitmapContextCreateImage: अमान्य संदर्भ 0x0

मैं नीचे दिए गए कोड का उपयोग करें:

- (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); 
} 
+0

आप NSLog 'bytesPerRow',' width' और 'height', क्या परिणाम रहे हैं? – Wildaker

+0

छवि में कोई छवि प्रदर्शन नहीं देखें – Nims

+0

मेरा मतलब है, यदि आप 'एनएसएलओजी (@ "% zi,% zi,% zi", चौड़ाई, ऊंचाई, बाइट्सप्रोरो) जोड़ते हैं;' CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB() से पहले '', आउटपुट क्या है कंसोल पर? – Wildaker

उत्तर

18

यह है कि क्या मेरी समस्या ठीक हो गई है: के रूप में "Wildaker" सुझाव दिया, यह "कोड है कि इसे" है, और अधिक या कम ।

ऐप्पल उदाहरण में आउटपुट प्रारूप सेट है। शायद आपने इस भाग को सरल बनाने के लिए छोड़ा?

output.videoSettings = [NSDictionary dictionaryWithObject: [NSNumber numberWithInt:kCVPixelFormatType_32BGRA] forKey: (id)kCVPixelBufferPixelFormatTypeKey];

+0

यह वही है जो मैंने नहीं किया ^^ सबक के लिए धन्यवाद! स्विफ्ट 3 के लिए –

+1

: output.videoSettings = [kCVPixelBufferPixelFormatTypeKey AnyHashable के रूप में: kCVPixelFormatType_32BGRA] – Massimo

0

void *baseAddress = CVPixelBufferGetBaseAddress(imageBuffer); को बदला जाना चाहिए: uint8_t *baseAddress = (uint8_t*)CVPixelBufferGetBaseAddress(imageBuffer);

+0

आप कोड को बेहतर तरीके से दिखाने के लिए कोड ब्लॉक का उपयोग कर सकते हैं। और थोड़ा और विवरण जोड़ सकते हैं। :-) –

+0

आपकी सलाह के लिए धन्यवाद, और मैं ध्यान दूंगा कि ये – easonwzs