2012-03-09 2 views
2

«mai» - это имя сетки, которое содержит изображение, текст и небольшое изображение. Я следил за сообщением в блоге о возможности добавить к вашему изображению, сделав его WriteableBitmap (с помощью UIelment).Сохранение записиableBitmap

try 
    { 
     WriteableBitmap wbm = new WriteableBitmap(mai, null); 

     MediaLibrary ml = new MediaLibrary(); 
     Stream stream = new MemoryStream(); 

     wbm.SaveJpeg(stream, wbm.PixelWidth, wbm.PixelHeight, 0, 100); 
     ml.SavePicture("mai.jpg", stream); 
     MessageBox.Show("Picture Saved..."); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message.ToString()); 
    } 

Когда я запускаю это в режиме отладки на эмуляторе я получаю Непредвиденная ошибка сообщение. Я также развернул это приложение на свой телефон (и отключил его от компьютера) и получил ту же ошибку.

В основном я пытаюсь сохранить обрезанное изображение, выбранное из Camera Roll, с некоторым текстом, наложенным поверх него. Это похоже на сохранение этого «нового» изображения в Camera Roll.

Update:

Я также сделал это с тем же результатом:

 WriteableBitmap wbm2 = new WriteableBitmap(mai, null); 
     string tempjpeg = "tempmedicalertinfo"; 



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

     wbm2.SaveJpeg(myfilestream, 500, 500, 0, 100); 
     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(); 

     // save the image to the saved pictures album. 
     try 
     { 
      Picture pic = library.SavePictureToCameraRoll("mai.jpg", myfilestream); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message.ToString()); 
     } 


     myfilestream.Close(); 

Update:

Трассировка стека ошибки:

at Microsoft.Xna.Framework.Helpers.ThrowExceptionFromErrorCode(ErrorCodes error) 
    at Microsoft.Xna.Framework.Media.MediaLibrary.SavePicture(String name, Stream source) 
    at PB.MASetup.saveImage_Click(Object sender, EventArgs e) 
    at Microsoft.Phone.Shell.ApplicationBarItemContainer.FireEventHandler(EventHandler handler, Object sender, EventArgs args) 
    at Microsoft.Phone.Shell.ApplicationBarIconButton.ClickEvent() 
    at Microsoft.Phone.Shell.ApplicationBarIconButtonContainer.ClickEvent() 
    at Microsoft.Phone.Shell.ApplicationBar.OnCommand(UInt32 idCommand) 
    at Microsoft.Phone.Shell.Interop.NativeCallbackInteropWrapper.OnCommand(UInt32 idCommand) 
+0

В каком контексте вы это называете? Являются ли 'wbm.PixelWidth' и wbm.PixelHeight правильными значениями? – Ku6opr

+0

Я только что проверил и значение ширины = 456 и значение высоты = 535. Похоже, что он захватывает то, что имеет размер сетки: mai – webdad3

+0

Я добавил ваш код к событию «Loaded» и все работает – Ku6opr

ответ

10

Проблема заключается в том, что потоки представляют собой данные байта. Поэтому, прежде чем вы сможете передать свой поток в медиа-библиотеку, вы должны искать его для начала. Это решит вашу проблему. Вот пример: (кстати, это хорошая практика, чтобы использовать структуру, используя для каждого объекта IDisposable)

using (MemoryStream stream = new MemoryStream()) 
{ 
    WriteableBitmap bitmap = new WriteableBitmap(LayoutRoot, null); 
    bitmap.SaveJpeg(stream, bitmap.PixelWidth, bitmap.PixelHeight, 0, 100); 
    stream.Seek(0, SeekOrigin.Begin); 

    using (MediaLibrary mediaLibrary = new MediaLibrary()) 
     mediaLibrary.SavePicture("Picture.jpg", stream); 
} 
MessageBox.Show("Picture Saved..."); 
5

После долгих сломав голову, я обнаружил, что моя проблема была недостающая способность в WMAppManifest.xml

<Capability Name="ID_CAP_MEDIALIB" /> 

Сообщение об ошибке было настолько неопределенным, что мне пришлось тратить столько времени, чтобы понять это.

+0

DAMN! После того, как я ударил головой о мой компьютер в течение 2 дней, я узнал об этом. Где ты был??? Благодаря :-) – noob

Смежные вопросы