Quantcast
Channel: Questions in topic: "xcode"
Viewing all articles
Browse latest Browse all 1047

Open iOS Media Browser and import selected image as texture

$
0
0
I'm new to Objective-C so please bear with me. I'm trying to open the native iOS Media Library and grab an image to use it as a texture. I've created a MediaBrowser.h and MediaBrowser.mm inside Assets->Plugins->iOS folder. I don't know if this is the correct approach to achieve my goals. If there is a best practice way to go, I'm also willing to rewrite the whole thing. Any help is highly appreciated. Thanks In Unity: I've addet a script component (ImageUploadButton.cs) to a UI button prefab: using UnityEngine; using System.Collections; using UnityEngine.UI; using UnityEngine.EventSystems; using System.Runtime.InteropServices; public class ImageUploadButton : MonoBehaviour, IPointerClickHandler {     [DllImport ("__Internal")]     private static extern string _invokeMediaBrowser();     public void invokeMediaBrowser() {         if (Application.platform == RuntimePlatform.IPhonePlayer)             _invokeMediaBrowser ();              }     public void OnPointerClick(PointerEventData eventData) {         invokeMediaBrowser();     } } My MediaBrowser.h looks like: #import #import #import #import "UnityAppController.h" @interface MediaBrowser : UIImagePickerController { NSString *selectedImagePath; } - (BOOL) startMediaBrowserFromViewController: (UIViewController*) controller usingDelegate: (id ) delegate; @end My MediaBrowser.mm is based on an apple developer article ([Picking an Item from the Photo Library][1]) , it looks like: #import "MediaBrowser.h" @implementation MediaBrowser - (BOOL) startMediaBrowserFromViewController: (UIViewController*) controller usingDelegate: (id ) delegate { if (([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeSavedPhotosAlbum] == NO) || (delegate == nil) || (controller == nil)) return NO; UIImagePickerController *mediaUI = [[UIImagePickerController alloc] init]; mediaUI.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; // Displays saved pictures and movies, if both are available, from the // Camera Roll album. mediaUI.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeSavedPhotosAlbum]; // Hides the controls for moving & scaling pictures, or for // trimming movies. To instead show the controls, use YES. mediaUI.allowsEditing = NO; mediaUI.delegate = delegate; //[controller presentModalViewController: mediaUI animated: YES]; [controller presentViewController:mediaUI animated:YES completion:nil]; return YES; } - (void) imagePickerController: (UIImagePickerController *) picker didFinishPickingMediaWithInfo: (NSDictionary *) info { NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType]; UIImage *originalImage, *editedImage, *imageToUse; // Handle a still image picked from a photo album if (CFStringCompare ((CFStringRef) mediaType, kUTTypeImage, 0) == kCFCompareEqualTo) { editedImage = (UIImage *) [info objectForKey: UIImagePickerControllerEditedImage]; originalImage = (UIImage *) [info objectForKey: UIImagePickerControllerOriginalImage]; if (editedImage) { imageToUse = editedImage; } else { imageToUse = originalImage; } // Do something with imageToUse selectedImagePath = [[info objectForKey:UIImagePickerControllerMediaURL] path]; } // Handle a movied picked from a photo album if (CFStringCompare ((CFStringRef) mediaType, kUTTypeMovie, 0) == kCFCompareEqualTo) { NSString *moviePath = [[info objectForKey:UIImagePickerControllerMediaURL] path]; // Do something with the picked movie available at moviePath selectedImagePath = moviePath; } UnitySendMessage("UIManager", "setWebGlLogo", [selectedImagePath UTF8String]); [[picker parentViewController] dismissModalViewControllerAnimated: YES]; //[picker release]; } - (NSString*) getSelectedImagePath { return selectedImagePath; } static MediaBrowser *mediaBrowserDelegate = nil; char* MakeStringCopy (const char* string) { if (string == NULL) return NULL; char* res = (char*)malloc(strlen(string)+1); strcpy(res, string); return res; } extern "C" { void _invokeMediaBrowser() { mediaBrowserDelegate = [[MediaBrowser alloc] init]; UnityAppController *appCtrl = GetAppController(); UIViewController *rootViewController = [appCtrl rootViewController]; [mediaBrowserDelegate startMediaBrowserFromViewController:rootViewController usingDelegate:(id)mediaBrowserDelegate]; } } @end On selecting an image, I'm using "UnitySendMessage" to send the path of the selected image to the "setWebGlLogo" c# method, I'm re-using this method, it is used for the WebGl image upload. I looks like: public IEnumerator setWebGlLogo(string imgPath) { WWW www = new WWW (imgPath); yield return www; Renderer renderer = LogoMesh.GetComponent (); renderer.material.mainTexture = www.texture; } On the Image upload button click, I get the following error: ![xcode erroron image button click][2] [1]: https://developer.apple.com/library/ios/documentation/AudioVideo/Conceptual/CameraAndPhotoLib_TopicsForIOS/Articles/PickinganItemfromthePhotoLibrary.html [2]: /storage/temp/64162-screen-shot-2016-02-18-at-120259.jpg

Viewing all articles
Browse latest Browse all 1047

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>