1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- //
- // UIImage+Extend.m
- // BankCard
- //
- // Created by XAYQ-FanXL on 16/7/8.
- // Copyright © 2016年 AN. All rights reserved.
- //
- #import "UIImage+Extend.h"
- @implementation UIImage (Extend)
- + (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];
- UIImage *image = [UIImage imageWithCGImage:quartzImage scale:1.0f orientation:UIImageOrientationRight];
-
- // Release the Quartz image
- CGImageRelease(quartzImage);
-
- return (image);
- }
- + (UIImage *)getImageStream:(CVImageBufferRef)imageBuffer {
- CIImage *ciImage = [CIImage imageWithCVPixelBuffer:imageBuffer];
- CIContext *temporaryContext = [CIContext contextWithOptions:nil];
- CGImageRef videoImage = [temporaryContext createCGImage:ciImage fromRect:CGRectMake(0, 0, CVPixelBufferGetWidth(imageBuffer), CVPixelBufferGetHeight(imageBuffer))];
-
- UIImage *image = [[UIImage alloc] initWithCGImage:videoImage];
-
- CGImageRelease(videoImage);
- return image;
- }
- + (UIImage *)getSubImage:(CGRect)rect inImage:(UIImage*)image {
- CGImageRef subImageRef = CGImageCreateWithImageInRect(image.CGImage, rect);
-
- CGRect smallBounds = CGRectMake(0, 0, CGImageGetWidth(subImageRef), CGImageGetHeight(subImageRef));
-
- UIGraphicsBeginImageContext(smallBounds.size);
-
- CGContextRef context = UIGraphicsGetCurrentContext();
-
- CGContextDrawImage(context, smallBounds, subImageRef);
-
- UIImage* smallImage = [UIImage imageWithCGImage:subImageRef];
- CFRelease(subImageRef);
-
- UIGraphicsEndImageContext();
-
- return smallImage;
- }
- -(UIImage *)originalImage {
- return [self imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
- }
- @end
|