Сохранение WriteableBitmap - PullRequest
       0

Сохранение WriteableBitmap

2 голосов
/ 09 марта 2012

"mai" - это имя сетки, которое содержит изображение, текст и маленькое изображение.Я следил за сообщением в блоге о возможности добавить к вашему изображению, сделав его WriteableBitmap (с пользовательским интерфейсом).

    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.

Обновление:

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

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

Обновление:

Stack Трассировка ошибки:

   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)

Ответы [ 2 ]

10 голосов
/ 09 марта 2012

Проблема в том, что потоки располагаются байтовыми данными.Поэтому, прежде чем вы сможете передать свой поток в медиа-библиотеку, вы должны найти его обратно в начало.Это решит вашу проблему.Вот пример: (кстати, рекомендуется использовать структуру using для каждого объекта 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 голосов
/ 22 апреля 2012

После долгих поломок я обнаружил, что моей проблемой является отсутствие возможности в WMAppManifest.xml

  <Capability Name="ID_CAP_MEDIALIB" />

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...