如何将WPF WriteableBitmap对象转换为System.Drawing.Image?
我的WPF客户端应用程序将位图数据发送到Web服务,Web服务需要在此端构建System.Drawing.Image。
我知道我可以获取WriteableBitmap的数据,将信息发送到Web服务:
// WPF side:
WriteableBitmap bitmap = ...;
int width = bitmap.PixelWidth;
int height = bitmap.PixelHeight;
int[] pixels = bitmap.Pixels;
myWebService.CreateBitmap(width, height, pixels);
但是在Web服务端,我不知道如何根据这些数据创建System.Drawing.Image。
// Web service side:
public void CreateBitmap(int[] wpfBitmapPixels, int width, int height)
{
System.Drawing.Bitmap bitmap = ? // How can I create this?
}
答案 0 :(得分:3)
此博客post展示了如何将WriteableBitmap编码为jpeg图像。也许这有帮助吗?
如果你真的想传输原始图像数据(像素),你可以:
我绝对更喜欢第一个解决方案(博客文章中描述的解决方案)。
答案 1 :(得分:3)
如果您的位图数据未压缩,则可以使用此System.Drawing.Bitmap
构造函数:Bitmap(Int32, Int32, Int32, PixelFormat, IntPtr)。
如果位图编码为jpg或png,请从位图数据创建MemoryStream
,并将其与Bitmap(Stream)构造函数一起使用。
编辑:
由于您要将位图发送到Web服务,我建议您先对其进行编码。 System.Windows.Media.Imaging命名空间中有几个编码器。例如:
WriteableBitmap bitmap = ...;
var stream = new MemoryStream();
var encoder = new JpegBitmapEncoder();
encoder.Frames.Add( BitmapFrame.Create( bitmap ) );
encoder.Save( stream );
byte[] buffer = stream.GetBuffer();
// Send the buffer to the web service
在接收端,只需:
var bitmap = new System.Drawing.Bitmap( new MemoryStream( buffer ) );
希望有所帮助。
答案 2 :(得分:0)
问题出在WPF上,Pixels
似乎不是WriteableBitmap
的属性。这里的一些答案指向SilverLight的文章,所以我怀疑这可能是WPF和SilverLight之间的区别。