Frage

I've seen variations of my questions on stack overflow but haven't had any answers that have worked for me. I'm trying to convert an image I retrieve via UIImagePickerController to an NSData object. In the debugger after I call AsJPEG the NSData object has text that appears as...

System.Exception: Could not initialize an instance of the type 'MonoTouch.Foundation.NSString': the native 'initWithDa…

(note the debugger cuts off the string)

My code is fairly straight forward (taken form samples on stack overflow)

    protected void Handle_FinishedPickingMedia (object sender, UIImagePickerMediaPickedEventArgs e) {
        // determine what was selected, video or image
        bool isImage = false;
        switch(e.Info[UIImagePickerController.MediaType].ToString()) {
        case "public.image":
            Console.WriteLine("Image selected");
            isImage = true;
            break;
        case "public.video":
            Console.WriteLine("Video selected");
            break;
        }

        string path = Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
        path = Path.Combine (path, "media");
        if (!Directory.Exists (path))
            Directory.CreateDirectory (path);
        path = Path.Combine (path, Path.GetRandomFileName ());

        // get common info (shared between images and video)
        NSUrl referenceURL = e.Info[new NSString("UIImagePickerControllerReferenceUrl")] as NSUrl;
        if (referenceURL != null)
            Console.WriteLine("Url:"+referenceURL.ToString ());

        // if it was an image, get the other image info
        if(isImage) {
            // get the original image
            UIImage originalImage = e.Info[UIImagePickerController.OriginalImage] as UIImage;

            if(originalImage != null) {
                // do something with the image
                Console.WriteLine ("got the original image");

                using (NSData imageData = originalImage.AsJPEG(0.75f)) {
                    byte[] dataBytes = new byte[imageData.Length];
                    System.Runtime.InteropServices.Marshal.Copy(imageData.Bytes, dataBytes, 0, Convert.ToInt32(imageData.Length));
                    File.WriteAllBytes (path, dataBytes);
                }
            }
        } else { // if it's a video
            // get video url
            NSUrl mediaURL = e.Info[UIImagePickerController.MediaURL] as NSUrl;
            if(mediaURL != null) {
                // ...
            }
        }          

        // dismiss the picker
        NavigationController.DismissViewController (true, null);
    }

I've seen other posts that suggested it was the size of the UIImage, so I've experimented with cropping it. Same result. I've also tried AsPNG, same result. I even tried scaling down the image to 1/4 it's original size and still get the error.

I think the key is the mention of NSString, which tells me something's fishy... as the native C call used in Xcode doesn't involve an NSString, so I think something else is going on.

Any suggestions?

War es hilfreich?

Lösung

As noted in the comment from therealjohn, this appears to be an error with the debugger when it converts a value to a string to display it in the debugger window it seems to run into an error. The NSData object is actually fine.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top