BitmapSource в поток Windows Phone - PullRequest
       0

BitmapSource в поток Windows Phone

3 голосов
/ 06 сентября 2011

У меня есть класс, который требует, чтобы Stream поворачивал изображение с камеры телефона.У меня проблема в том, что при загрузке изображения из изолированного хранилища (т. Е. После того, как пользователь предварительно сохранил изображение) оно загружается в BitmapSource.

Я бы хотел «извлечь» источник растрового изображения обратно встрим если возможно?Кто-нибудь знает, использует ли он Silverlight для WP7?

Спасибо

Ответы [ 3 ]

5 голосов
/ 07 сентября 2011

Попробуйте:

WriteableBitmap bmp = new WriteableBitmap((BitmapSource)img);

using (MemoryStream stream = new MemoryStream()) {

    bmp.SaveJpeg(stream, bmp.PixelWidth, bmp.PixelHeight, 0, 100);
    return stream;
}
2 голосов
/ 07 сентября 2011

Вам не нужно извлекать его обратно в источник BitMap напрямую, но вы можете получить его через класс IsolatedStorageFileStream.

Вот моя версия вашего класса, метод которого принимает поток (ваш код, очевидно, делает больше, чем мой, но этого должно быть достаточно для наших целей).

public class MyPhotoClass
{
    public BitmapSource ConvertToBitmapSource(Stream stream)
    {
        BitmapImage img = new BitmapImage();
        img.SetSource(stream);
        return img;
    }
}

Затем вызов этого класса с данными из файла, который мы извлекли из изолированного хранилища:

private void LoadFromIsostore_Click(object sender, RoutedEventArgs e)
{
    using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
    {
        using (IsolatedStorageFileStream fs = file.OpenFile("saved.image", FileMode.Open))
        {
            MyPhotoClass c = new MyPhotoClass();
            BitmapSource picture = c.ConvertToBitmapSource(fs);
            MyPicture.Source = picture;
        }
    }
}

Обратите внимание, что мы используем объект IsolatedStorageFileStream, возвращенный из метода OpenFile напрямую. Это поток, который ожидает ConvertToBitmapSource.

Дайте мне знать, если это не то, что вы ищете, или я неправильно понял ваш вопрос ...

1 голос
/ 15 августа 2013
        var background = Brushes.Transparent;

        var bmp = Viewport3DHelper.RenderBitmap(viewport, 500, 500, background);

        BitmapEncoder encoder;
        string ext = Path.GetExtension(FileName);
        switch (ext.ToLower())
        {

            case ".png":
                var png = new PngBitmapEncoder();
                png.Frames.Add(BitmapFrame.Create(bmp));
                encoder = png;
                break;
            default:
                throw new InvalidOperationException("Not supported file format.");
        }

        //using (Stream stm = File.Create(FileName))
        //{
        //    encoder.Save(stm);
        //}

        using (MemoryStream stream = new MemoryStream())
        {
            encoder.Save(stream);

            this.pictureBox1.Image = System.Drawing.Image.FromStream(stream);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...