2011-09-28 73 views
1

爲什麼此代碼拋出InvalidOperationException如果我連接到PC或沒有metter?Windows Phone - SavePicture - InvalidOperationException

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(); 

我使用WP7 RC工具和XNA 圖片是的Texture2D實例

回答

1

就解決了這個問題。

我忘了,我打了權限(清單文件),並刪除不期而遇此權限

<Capability Name="ID_CAP_MEDIALIB" /> 
0

在這裏找到這個例子:How to: Encode a JPEG for Windows Phone and Save to the Pictures Library

希望有幫助,它是先保存在IsolatedStorage流然後裝入那裏和最後在MediaLibrary中保存...

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(); 
} 
+0

THX,尋求幫助,但,這不是一個問題。 – EOG