Преобразование BitmapImage в byte[] в UWP и вставка в sqlite

Мне нужно преобразовать BitmapImage в byte[], чтобы я мог сохранить эти данные в базе данных SQLite и сделать наоборот, чтобы загрузить их.

Мой XAML имеет изображение:

<Image x:Name="image" HorizontalAlignment="Left" Height="254" Margin="50,117,0,0" VerticalAlignment="Top" Width="244" Source="Assets/LockScreenLogo.png"/>

Мой код С#:

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
        BitmapImage test = new BitmapImage();
        test = (BitmapImage)image.Source;
        image.Source = test;

        byte[] array = ImageToByte(test);
        Database.CreateDB();
        Database.InsertData(array);
    }



    #region convert
    public byte[] ImageToByte(BitmapImage image)
    {

        //WriteableBitmap wb;
        using (InMemoryRandomAccessStream ms = new InMemoryRandomAccessStream())
        {
            image.SetSource(ms);

            WriteableBitmap wb = new WriteableBitmap(244, 254);
            wb.SetSource(ms);

            using (Stream stream = wb.PixelBuffer.AsStream())
            using (MemoryStream memoryStream = new MemoryStream())
            {
                stream.CopyTo(memoryStream);
                return memoryStream.ToArray();
            }
        }
    }

    public BitmapImage ByteToImage(byte[] array)
    {
        BitmapImage image = new BitmapImage();
        using (InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream())
        {
            stream.AsStreamForWrite().Write(array, 0, array.Length);
            stream.Seek(0);
            image.SetSource(stream);
        }
        return image;
    }
    #endregion

}

Это не работает.

сообщение об исключении:

"Исключение типа "System.ArgumentNullException" возникло в mscorlib.ni.dll, но не было обработано в пользовательском коде

Дополнительная информация: значение не может быть нулевым».

Кто-нибудь может мне помочь?


person Giorge Caique    schedule 16.09.2016    source источник
comment
Возможный дубликат преобразования BitmapImage в массив байтов в UWP   -  person Clemens    schedule 17.09.2016


Ответы (1)


К сожалению, это невозможно, если у вас нет незадерживаемого источника изображения (например, StorageItem или URL).

Чтобы получить доступ к пикселям (и выполнить любую обработку впоследствии), вам нужен объект WriteableBitmap вместо BitmapImage.

person AlexDrenea    schedule 16.09.2016