如何在Silverlight5中将WriteableBitmap转换为BitmapImage对象?

时间:2014-01-14 19:56:11

标签: silverlight-5.0

如何在Silverlight5中将WriteableBitmap转换为BitmapImage对象?

到目前为止,我尝试将WriteableBitmap转换为BitmapImage;但是,它不起作用。

没有抛出异常,生成的BitmapImage只是一个没有数据的“空”对象; PixelHeight和PixelWidth都为零:

public BitmapImage Convert(WriteableBitmap wb)
{
   int[] p = wb.Pixels;
   int len = p.Length * 4;
   byte[] result = new byte[len];
   Buffer.BlockCopy(p, 0, result, 0, len);

   MemoryStream ms = new MemoryStream(result);

   BitmapImage bi = new BitmapImage();
   bi.SetSource(ms); 

   // bi.PixelHeight and bi.PixelWidth are zero.

   return bi; // pretty much an empty image.
}

在此交叉发布:http://social.msdn.microsoft.com/Forums/silverlight/en-US/0a0c833b-8e68-4c8d-871a-d0805d84ba16/writeablebitmap-to-bitmapimage?forum=silverlightpivotviewer

1 个答案:

答案 0 :(得分:1)

总结关于你的跨职位的讨论:

是的,您必须将图片转换为png或jpg才能创建BitmapImage

BitmapImage期望的流是一个编码图像文件,但是从WriteableBitmap获得的字节是未压缩的原始ARGB像素格式。

为了生成png或jpg,你必须使用链接对可以执行此操作的库,或使用Stegman的单页png编码器(实际上不压缩任何东西)。

由于这已经在您问过的论坛中提出过,但您注意到该链接已损坏,我从本地的副本中放了一个公开gist on github