Сохранение массива WriteableBitmap в файл

Можно ли сохранить массив WriteableBitmap в файл на диске целиком и получить его целиком?


person P5music    schedule 28.05.2013    source источник
comment
WinRT, WPF, Silverlight?   -  person Denis    schedule 28.05.2013
comment
@Denis Меня интересует WinRT, а также WPF, если вы знаете.   -  person P5music    schedule 29.05.2013


Ответы (2)


Перед сохранением необходимо закодировать вывод WriteableBitmap в распознаваемый формат изображения, такой как PNG или JPG, иначе это просто байты в файле. Взгляните на ImageTools (http://imagetools.codeplex.com/), который поддерживает PNG, JPG, BMP. и форматы GIF. Пример сохранения изображения в файл можно найти по адресу http://imagetools.codeplex.com/wikipage?title=Write%20the%20content%20of%20a%20canvas%20to%20a%20file&referringTitle=Home.

person Aditya Patil    schedule 28.05.2013

Вы можете получить массив байтов из WritableBitmap. И этот массив можно сохранить и прочитать в файл. Что-то вроде этого;

WritableBitmap[] bitmaps;

// Compute total size of bitmaps in bytes + size of metadata headers
int totalSize = bitmaps.Sum(b => b.BackBufferStride * b.Height) + bitmaps.Length * 4;

var bitmapData = new byte[totalSize];

for (int i = 0, offset = 0; i < bitmaps.Length; i++)
{
    bitmaps[i].Lock();

    // Apppend header with bitmap size
    int size = bitmaps[i].BackBufferStride * bitmaps[i].Height;
    byte[] sizeBytes = BitConverter.GetBytes(size);
    Buffer.BlockCopy(sizeBytes, 0, bitmapData, offset, 4);

    offset += 4;

    // Append bitmap content
    Marshal.Copy(bitmaps[i].BackBuffer, bitmapData, offset, size);

    offset += size;

    bitmaps[i].Unlock();
}

// Save bitmapDat to file.

И аналогично для чтения из файла.

UPD. Добавлены заголовки с размерами растровых изображений. Без них было бы сложно читать отдельные растровые изображения из однобайтового массива.

person OpenMinded    schedule 28.05.2013