IOS Dev Intro - Create UImage from Sample Buffer Data

来源:互联网 发布:sql慢查询优化 编辑:程序博客网 时间:2024/06/01 08:46




// 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    size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer);    // Get the pixel buffer width and height    size_t width = CVPixelBufferGetWidth(imageBuffer);    size_t height = CVPixelBufferGetHeight(imageBuffer);            // Get the number of bytes per row for the pixel buffer    u_int8_t *baseAddress = (u_int8_t *)malloc(bytesPerRow*height);    memcpy( baseAddress, CVPixelBufferGetBaseAddress(imageBuffer), bytesPerRow * height     );        // size_t bufferSize = CVPixelBufferGetDataSize(imageBuffer);        // Create a device-dependent RGB color space    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();        // Create a bitmap graphics context with the sample buffer data        //The context draws into a bitmap which is `width'    //  pixels wide and `height' pixels high. The number of components for each    //      pixel is specified by `space'    CGContextRef context = CGBitmapContextCreate(baseAddress, width, height, 8,                                                 bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaNoneSkipFirst);        // 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 scale:1.0 orientation:UIImageOrientationRight];    free(baseAddress);    // Release the Quartz image    CGImageRelease(quartzImage);    return (image);}

0 0