如何在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.
}
答案 0 :(得分:1)
总结关于你的跨职位的讨论:
是的,您必须将图片转换为png或jpg才能创建BitmapImage
。
BitmapImage
期望的流是一个编码图像文件,但是从WriteableBitmap
获得的字节是未压缩的原始ARGB像素格式。
为了生成png或jpg,你必须使用链接对可以执行此操作的库,或使用Stegman的单页png编码器(实际上不压缩任何东西)。
由于这已经在您问过的论坛中提出过,但您注意到该链接已损坏,我从本地的副本中放了一个公开gist on github。