C# WPF/WinForms/GDI互操作:将可写位图转换为System.Drawing.Image?
如何将WPF WriteableBitmap对象转换为System.Drawing.Image 我的WPF客户端应用程序将位图数据发送到web服务,web服务需要在该端构建System.Drawing.Image 我知道我可以获取可写位图的数据,并将信息发送到web服务:C# WPF/WinForms/GDI互操作:将可写位图转换为System.Drawing.Image?,c#,wpf,winforms,writeablebitmap,winforms-interop,C#,Wpf,Winforms,Writeablebitmap,Winforms Interop,如何将WPF WriteableBitmap对象转换为System.Drawing.Image 我的WPF客户端应用程序将位图数据发送到web服务,web服务需要在该端构建System.Drawing.Image 我知道我可以获取可写位图的数据,并将信息发送到web服务: // WPF side: WriteableBitmap bitmap = ...; int width = bitmap.PixelWidth; int height = bitmap.PixelHeight; int[]
// 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?
}
本博客展示了如何将WriteableBitmap编码为jpeg图像。也许这有帮助
如果确实要传输原始图像数据(像素),可以:
我当然更喜欢第一种解决方案(博客文章中描述的解决方案)。如果位图数据未压缩,您可能可以使用此
系统。绘图。位图
构造函数:
如果位图编码为jpg或png,则从位图数据创建MemoryStream
,并将其与构造函数一起使用
编辑:
由于要将位图发送到web服务,我建议您首先对其进行编码。命名空间中有多个编码器。例如:
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 ) );
希望这能有所帮助。问题是针对WPF的,
像素
似乎不是WriteableBitmap
的属性。这里的一些答案指向SilverLight文章,所以我怀疑这可能是WPF和SilverLight之间的差异。谢谢。我会仔细研究一下,看看这些是否有帮助。我的数据只是wpfWrite像素,返回int[]我用一个示例更新了我的答案,说明了如何在发送位图之前对其进行编码,以及如何在web服务中对其进行解码。