118 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| /*M///////////////////////////////////////////////////////////////////////////////////////
 | |
| //
 | |
| //  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
 | |
| //
 | |
| //  By downloading, copying, installing or using the software you agree to this license.
 | |
| //  If you do not agree to this license, do not download, install,
 | |
| //  copy or use the software.
 | |
| //
 | |
| //
 | |
| //                          License Agreement
 | |
| //                For Open Source Computer Vision Library
 | |
| //
 | |
| // Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
 | |
| // Copyright (C) 2009, Willow Garage Inc., all rights reserved.
 | |
| // Third party copyrights are property of their respective owners.
 | |
| //
 | |
| // Redistribution and use in source and binary forms, with or without modification,
 | |
| // are permitted provided that the following conditions are met:
 | |
| //
 | |
| //   * Redistribution's of source code must retain the above copyright notice,
 | |
| //     this list of conditions and the following disclaimer.
 | |
| //
 | |
| //   * Redistribution's in binary form must reproduce the above copyright notice,
 | |
| //     this list of conditions and the following disclaimer in the documentation
 | |
| //     and/or other materials provided with the distribution.
 | |
| //
 | |
| //   * The name of the copyright holders may not be used to endorse or promote products
 | |
| //     derived from this software without specific prior written permission.
 | |
| //
 | |
| // This software is provided by the copyright holders and contributors "as is" and
 | |
| // any express or implied warranties, including, but not limited to, the implied
 | |
| // warranties of merchantability and fitness for a particular purpose are disclaimed.
 | |
| // In no event shall the Intel Corporation or contributors be liable for any direct,
 | |
| // indirect, incidental, special, exemplary, or consequential damages
 | |
| // (including, but not limited to, procurement of substitute goods or services;
 | |
| // loss of use, data, or profits; or business interruption) however caused
 | |
| // and on any theory of liability, whether in contract, strict liability,
 | |
| // or tort (including negligence or otherwise) arising in any way out of
 | |
| // the use of this software, even if advised of the possibility of such damage.
 | |
| //
 | |
| //M*/
 | |
| 
 | |
| #import "opencv2/highgui/cap_ios.h"
 | |
| #include "precomp.hpp"
 | |
| 
 | |
| UIImage* MatToUIImage(const cv::Mat& image) {
 | |
| 
 | |
|     NSData *data = [NSData dataWithBytes:image.data
 | |
|                                   length:image.elemSize()*image.total()];
 | |
| 
 | |
|     CGColorSpaceRef colorSpace;
 | |
| 
 | |
|     if (image.elemSize() == 1) {
 | |
|         colorSpace = CGColorSpaceCreateDeviceGray();
 | |
|     } else {
 | |
|         colorSpace = CGColorSpaceCreateDeviceRGB();
 | |
|     }
 | |
| 
 | |
|     CGDataProviderRef provider =
 | |
|             CGDataProviderCreateWithCFData((__bridge CFDataRef)data);
 | |
| 
 | |
|     // Creating CGImage from cv::Mat
 | |
|     CGImageRef imageRef = CGImageCreate(image.cols,
 | |
|                                         image.rows,
 | |
|                                         8,
 | |
|                                         8 * image.elemSize(),
 | |
|                                         image.step.p[0],
 | |
|                                         colorSpace,
 | |
|                                         kCGImageAlphaNone|
 | |
|                                         kCGBitmapByteOrderDefault,
 | |
|                                         provider,
 | |
|                                         NULL,
 | |
|                                         false,
 | |
|                                         kCGRenderingIntentDefault
 | |
|                                         );
 | |
| 
 | |
| 
 | |
|     // Getting UIImage from CGImage
 | |
|     UIImage *finalImage = [UIImage imageWithCGImage:imageRef];
 | |
|     CGImageRelease(imageRef);
 | |
|     CGDataProviderRelease(provider);
 | |
|     CGColorSpaceRelease(colorSpace);
 | |
| 
 | |
|     return finalImage;
 | |
| }
 | |
| 
 | |
| void UIImageToMat(const UIImage* image,
 | |
|                          cv::Mat& m, bool alphaExist) {
 | |
|     CGColorSpaceRef colorSpace = CGImageGetColorSpace(image.CGImage);
 | |
|     CGFloat cols = image.size.width, rows = image.size.height;
 | |
|     CGContextRef contextRef;
 | |
|     CGBitmapInfo bitmapInfo = kCGImageAlphaPremultipliedLast;
 | |
|     if (CGColorSpaceGetModel(colorSpace) == 0)
 | |
|     {
 | |
|         m.create(rows, cols, CV_8UC1); // 8 bits per component, 1 channel
 | |
|         bitmapInfo = kCGImageAlphaNone;
 | |
|         if (!alphaExist)
 | |
|             bitmapInfo = kCGImageAlphaNone;
 | |
|         contextRef = CGBitmapContextCreate(m.data, m.cols, m.rows, 8,
 | |
|                                            m.step[0], colorSpace,
 | |
|                                            bitmapInfo);
 | |
|     }
 | |
|     else
 | |
|     {
 | |
|         m.create(rows, cols, CV_8UC4); // 8 bits per component, 4 channels
 | |
|         if (!alphaExist)
 | |
|             bitmapInfo = kCGImageAlphaNoneSkipLast |
 | |
|                                 kCGBitmapByteOrderDefault;
 | |
|         contextRef = CGBitmapContextCreate(m.data, m.cols, m.rows, 8,
 | |
|                                            m.step[0], colorSpace,
 | |
|                                            bitmapInfo);
 | |
|     }
 | |
|     CGContextDrawImage(contextRef, CGRectMake(0, 0, cols, rows),
 | |
|                        image.CGImage);
 | |
|     CGContextRelease(contextRef);
 | |
|     CGColorSpaceRelease(colorSpace);
 | |
| }
 | 
