2014-10-23 2 views
1

Есть ли способ конвертировать массив WriteableBitmap в байтовый массив? Я также назначаю writeablemart для источника System.Windows.Controls.Image, если есть способ получить его от этого. Я попробовал это, но получил общее исключение GDI в FromHBitmap.WPF WriteableBitmap to byte array

System.Drawing.Image img = System.Drawing.Image.FromHbitmap(wb.BackBuffer); 
MemoryStream ms = new MemoryStream(); 
img.Save(ms, System.Drawing.Imaging.ImageFormat.Png); 
myarray = ms.ToArray(); 
+0

Где: WriteableBitmap в вашем коде? – thumbmunkeys

+0

Объявлено в классе, но я его отредактировал, чтобы иметь больше смысла. – shady

+0

Теперь, когда вы изменили данные на BackBuffer, это имеет смысл. – thumbmunkeys

ответ

3

Ваш код кодирует данные изображения в формате PNG, но FromHBitmap ожидает, что сырье, незакодированной данные растрового изображения.

Попробуйте это:

var width = bitmapSource.PixelWidth; 
var height = bitmapSource.PixelHeight; 
var stride = width * ((bitmapSource.Format.BitsPerPixel + 7)/8); 

var bitmapData = new byte[height * stride]; 

bitmapSource.CopyPixels(bitmapData, stride, 0); 

... где bitmapSource это ваш WriteableBitmap (или любой другой BitmapSource).

+0

Похоже, что это трюк, спасибо вам, сэр. – shady

+1

В UWP нет объекта .Format.BitsPerPixel для объекта WriteableBitmap. Кроме того, CopyPixels не существует. Почему существуют такие большие различия между теми же типами данных в WPF и UWP? –

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

  • Нет связанных вопросов^_^