powerfun-unity/Assets/Plugins/iOS/IOSCameraController.m

177 lines
8.5 KiB
Mathematica
Raw Normal View History

#import "IOSCameraController.h"
@implementation IOSCameraController
-(void)OpenTarget:(UIImagePickerControllerSourceType)type{
//UIImagePickerController
UIImagePickerController *picker;
picker= [[UIImagePickerController alloc]init];
//
picker.delegate = self;
// (NO)
picker.allowsEditing = YES;
//
// UIImagePickerControllerSourceTypePhotoLibrary, //
// UIImagePickerControllerSourceTypeCamera, //
// UIImagePickerControllerSourceTypeSavedPhotosAlbum //
picker.sourceType = type;
//iphoneipad 使iphone ipad ()
//ipad 使
//QQipad 使
//https://www.tlbyxzcx.com
if (picker.sourceType == UIImagePickerControllerSourceTypePhotoLibrary &&[[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) {
//
picker.modalPresentationStyle = UIModalPresentationPopover;
//
UIPopoverPresentationController *popover = picker.popoverPresentationController;
//
popover.delegate = self;
//
popover.sourceRect = CGRectMake(0, 0, 0, 0);
popover.sourceView = self.view;
//
popover.permittedArrowDirections = UIPopoverArrowDirectionAny;
//
[self presentViewController:picker animated:YES completion:nil];
} else {
//
[self presentViewController:picker animated:YES completion:^{}];
}
}
//Choose
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{
//
[picker dismissViewControllerAnimated:YES completion:^{}];
//
UIImage *image = [info objectForKey:@"UIImagePickerControllerEditedImage"];
if (image == nil) {
image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
}
//ios
//
if (image.imageOrientation != UIImageOrientationUp) {
//
image = [self fixOrientation:image];
}
NSUUID *UUID = [NSUUID UUID];
NSString *result =[[UUID UUIDString] stringByAppendingString:@".jpg"];
//
NSString *imagePath = [self GetSavePath:result];
// unityApplication.persistentDataPath
[self SaveFileToDoc:image path:imagePath];
}
//
-(NSString*)GetSavePath:(NSString *)filename{
NSArray *pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docPath = [pathArray objectAtIndex:0];
return [docPath stringByAppendingPathComponent:filename];
}
//
-(void)SaveFileToDoc:(UIImage *)image path:(NSString *)path{
NSData *data;
if (UIImagePNGRepresentation(image)==nil) {
data = UIImageJPEGRepresentation(image, 1);
}else{
data = UIImagePNGRepresentation(image);
}
[data writeToFile:path atomically:YES];
//unity
//UnitySendMessage unity 1. 2. 3.
UnitySendMessage(pageName.UTF8String, "OnMobileImageSelect", [NSString stringWithFormat:@"true,%@",path ].UTF8String);
}
#pragma mark
//
- (UIImage *)fixOrientation:(UIImage *)aImage {
CGAffineTransform transform = CGAffineTransformIdentity;
switch (aImage.imageOrientation) {
case UIImageOrientationDown:
case UIImageOrientationDownMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.width, aImage.size.height);
transform = CGAffineTransformRotate(transform, M_PI);
break;
case UIImageOrientationLeft:
case UIImageOrientationLeftMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.width, 0);
transform = CGAffineTransformRotate(transform, M_PI_2);
break;
case UIImageOrientationRight:
case UIImageOrientationRightMirrored:
transform = CGAffineTransformTranslate(transform, 0, aImage.size.height);
transform = CGAffineTransformRotate(transform, -M_PI_2);
break;
default:
break;
}
switch (aImage.imageOrientation) {
case UIImageOrientationUpMirrored:
case UIImageOrientationDownMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.width, 0);
transform = CGAffineTransformScale(transform, -1, 1);
break;
case UIImageOrientationLeftMirrored:
case UIImageOrientationRightMirrored:
transform = CGAffineTransformTranslate(transform, aImage.size.height, 0);
transform = CGAffineTransformScale(transform, -1, 1);
break;
default:
break;
}
// Now we draw the underlying CGImage into a new context, applying the transform
// calculated above.
CGContextRef ctx = CGBitmapContextCreate(NULL, aImage.size.width, aImage.size.height,
CGImageGetBitsPerComponent(aImage.CGImage), 0,
CGImageGetColorSpace(aImage.CGImage),
CGImageGetBitmapInfo(aImage.CGImage));
CGContextConcatCTM(ctx, transform);
switch (aImage.imageOrientation) {
case UIImageOrientationLeft:
case UIImageOrientationLeftMirrored:
case UIImageOrientationRight:
case UIImageOrientationRightMirrored:
// Grr...
CGContextDrawImage(ctx, CGRectMake(0,0,aImage.size.height,aImage.size.width), aImage.CGImage);
break;
default:
CGContextDrawImage(ctx, CGRectMake(0,0,aImage.size.width,aImage.size.height), aImage.CGImage);
break;
}
// And now we just create a new UIImage from the drawing context
CGImageRef cgimg = CGBitmapContextCreateImage(ctx);
UIImage *img = [UIImage imageWithCGImage:cgimg];
CGContextRelease(ctx);
CGImageRelease(cgimg);
return img;
}
@end
//C++dllC
//使CC++C
//CdllCC++使
#if defined(__cplusplus)
extern "C" {
#endif
//unity使
void IOS_OpenCamera(const char * pageName){
IOSCameraController *app = [[IOSCameraController alloc]init];
app->pageName = [NSString stringWithUTF8String:pageName];
UIViewController *vc = UnityGetGLViewController();
[vc.view addSubview:app.view];
[app OpenTarget:UIImagePickerControllerSourceTypeCamera];
}
void IOS_OpenAlbum(const char * pageName){
IOSCameraController *app = [[IOSCameraController alloc]init];
app->pageName = [NSString stringWithUTF8String:pageName];
UIViewController *vc = UnityGetGLViewController();
[vc.view addSubview:app.view];
[app OpenTarget:UIImagePickerControllerSourceTypePhotoLibrary];
}
#if defined(__cplusplus)
}
#endif