EOG
EOG

Reputation: 1757

Windows Phone - SavePicture - InvalidOperationException

Why this code throws InvalidOperationException no metter if I am conncted to PC or not?

MemoryStream ms = new MemoryStream();
picture.SaveAsJpeg(ms, 480, 800);
ms.Seek(0, SeekOrigin.Begin);
MediaLibrary l = new MediaLibrary();
l.SavePicture("test11", ms);
l.Dispose();
ms.Dispose();

I use WP7 RC Tools and XNA picture is an Texture2D instance

Upvotes: 1

Views: 2075

Answers (3)

EOG
EOG

Reputation: 1757

Just solved the problem.

I forgot I've played with permissions (manifest file), and accidentaly deleted this permission

<Capability Name="ID_CAP_MEDIALIB" />

Upvotes: 1

Claus J&#248;rgensen
Claus J&#248;rgensen

Reputation: 26345

If you're connected to the PC, you can't use the MediaLibrary. Instead connect with WPConnect.exe

See this answer for details on how: Unable to launch CameraCaptureTask or PhotoChooserTask while debugging with device

Upvotes: 0

Davide Piras
Davide Piras

Reputation: 44595

found this example here: How to: Encode a JPEG for Windows Phone and Save to the Pictures Library

hopefully it helps, it is saving the stream in the IsolatedStorage first then loading from there and saving in the MediaLibrary in the end...

private void btnSave_Click(object sender, RoutedEventArgs e)
{
    // Create a file name for the JPEG file in isolated storage.
    String tempJPEG = "TempJPEG";

    // Create a virtual store and file stream. Check for duplicate tempJPEG files.
    var myStore = IsolatedStorageFile.GetUserStoreForApplication();
    if (myStore.FileExists(tempJPEG))
    {
        myStore.DeleteFile(tempJPEG);
    }

    IsolatedStorageFileStream myFileStream = myStore.CreateFile(tempJPEG);


    // Create a stream out of the sample JPEG file.
    // For [Application Name] in the URI, use the project name that you entered 
    // in the previous steps. Also, TestImage.jpg is an example;
    // you must enter your JPEG file name if it is different.
    StreamResourceInfo sri = null;
    Uri uri = new Uri("[Application Name];component/TestImage.jpg", UriKind.Relative);
    sri = Application.GetResourceStream(uri);

    // Create a new WriteableBitmap object and set it to the JPEG stream.
    BitmapImage bitmap = new BitmapImage();
    bitmap.CreateOptions = BitmapCreateOptions.None; 
    bitmap.SetSource(sri.Stream);
    WriteableBitmap wb = new WriteableBitmap(bitmap);

    // Encode the WriteableBitmap object to a JPEG stream.
    wb.SaveJpeg(myFileStream, wb.PixelWidth, wb.PixelHeight, 0, 85);
    myFileStream.Close();

    // Create a new stream from isolated storage, and save the JPEG file to the media library on Windows Phone.
    myFileStream = myStore.OpenFile(tempJPEG, FileMode.Open, FileAccess.Read);

    // Save the image to the camera roll or saved pictures album.
    MediaLibrary library = new MediaLibrary();

    if (radioButtonCameraRoll.IsChecked == true)
    {
        // Save the image to the camera roll album.
        Picture pic = library.SavePictureToCameraRoll("SavedPicture.jpg", myFileStream);
        MessageBox.Show("Image saved to camera roll album");
    }
    else
    {
        // Save the image to the saved pictures album.
        Picture pic = library.SavePicture("SavedPicture.jpg", myFileStream);
        MessageBox.Show("Image saved to saved pictures album");
    }

    myFileStream.Close();
}

Upvotes: 0

Related Questions