UIImage+Extend.m 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. //
  2. // UIImage+Extend.m
  3. // BankCard
  4. //
  5. // Created by XAYQ-FanXL on 16/7/8.
  6. // Copyright © 2016年 AN. All rights reserved.
  7. //
  8. #import "UIImage+Extend.h"
  9. @implementation UIImage (Extend)
  10. + (UIImage *)imageFromSampleBuffer:(CMSampleBufferRef)sampleBuffer {
  11. // Get a CMSampleBuffer's Core Video image buffer for the media data
  12. CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
  13. // Lock the base address of the pixel buffer
  14. CVPixelBufferLockBaseAddress(imageBuffer, 0);
  15. // Get the number of bytes per row for the pixel buffer
  16. void *baseAddress = CVPixelBufferGetBaseAddress(imageBuffer);
  17. // Get the number of bytes per row for the pixel buffer
  18. size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer);
  19. // Get the pixel buffer width and height
  20. size_t width = CVPixelBufferGetWidth(imageBuffer);
  21. size_t height = CVPixelBufferGetHeight(imageBuffer);
  22. // Create a device-dependent RGB color space
  23. CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
  24. // Create a bitmap graphics context with the sample buffer data
  25. CGContextRef context = CGBitmapContextCreate(baseAddress, width, height, 8, bytesPerRow, colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedFirst);
  26. // Create a Quartz image from the pixel data in the bitmap graphics context
  27. CGImageRef quartzImage = CGBitmapContextCreateImage(context);
  28. // Unlock the pixel buffer
  29. CVPixelBufferUnlockBaseAddress(imageBuffer,0);
  30. // Free up the context and color space
  31. CGContextRelease(context);
  32. CGColorSpaceRelease(colorSpace);
  33. // Create an image object from the Quartz image
  34. //UIImage *image = [UIImage imageWithCGImage:quartzImage];
  35. UIImage *image = [UIImage imageWithCGImage:quartzImage scale:1.0f orientation:UIImageOrientationRight];
  36. // Release the Quartz image
  37. CGImageRelease(quartzImage);
  38. return (image);
  39. }
  40. + (UIImage *)getImageStream:(CVImageBufferRef)imageBuffer {
  41. CIImage *ciImage = [CIImage imageWithCVPixelBuffer:imageBuffer];
  42. CIContext *temporaryContext = [CIContext contextWithOptions:nil];
  43. CGImageRef videoImage = [temporaryContext createCGImage:ciImage fromRect:CGRectMake(0, 0, CVPixelBufferGetWidth(imageBuffer), CVPixelBufferGetHeight(imageBuffer))];
  44. UIImage *image = [[UIImage alloc] initWithCGImage:videoImage];
  45. CGImageRelease(videoImage);
  46. return image;
  47. }
  48. + (UIImage *)getSubImage:(CGRect)rect inImage:(UIImage*)image {
  49. CGImageRef subImageRef = CGImageCreateWithImageInRect(image.CGImage, rect);
  50. CGRect smallBounds = CGRectMake(0, 0, CGImageGetWidth(subImageRef), CGImageGetHeight(subImageRef));
  51. UIGraphicsBeginImageContext(smallBounds.size);
  52. CGContextRef context = UIGraphicsGetCurrentContext();
  53. CGContextDrawImage(context, smallBounds, subImageRef);
  54. UIImage* smallImage = [UIImage imageWithCGImage:subImageRef];
  55. CFRelease(subImageRef);
  56. UIGraphicsEndImageContext();
  57. return smallImage;
  58. }
  59. -(UIImage *)originalImage {
  60. return [self imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
  61. }
  62. @end