C#图片转换方法:从System.Drawing.Image到System.Windows.Media.ImageSource

3星 · 超过75%的资源 需积分: 9 7 下载量 95 浏览量 更新于2024-09-14 收藏 2KB TXT 举报
"这篇文档介绍了如何在C#中进行图片格式转换,特别是将System.Drawing.Image类型转换为System.Windows.Media.ImageSource类型,以及如何将图片转换为字节流和从字节流还原图片。这些功能在C# Winform与WPF应用之间共享图像资源时非常有用。" 在C#编程中,经常需要在不同的图像处理库之间进行转换,特别是在Winform和WPF这两个UI框架之间。标题提到的"System.Drawing.Image转System.Windows.Media.ImageSource"就是这样的一个例子。`System.Drawing.Image`是用于Winform中的图像处理类,而`System.Windows.Media.ImageSource`则是WPF中的图像表示方式。下面我们将详细讨论这两个转换过程。 首先,我们来看如何将`System.Drawing.Image`转换为`System.Windows.Media.ImageSource`。提供的代码片段展示了一个名为`ConvertDrawingImage2MediaImageSource`的方法。这个方法接收一个`System.Drawing.Image`对象作为参数,然后通过以下步骤完成转换: 1. 创建一个`MemoryStream`实例,用于存储图像数据。 2. 创建一个`System.Windows.Media.Imaging.BitmapImage`对象,它代表WPF中的位图图像。 3. 初始化`BitmapImage`,并设置其数据源为前面创建的`MemoryStream`。 4. 将输入的`System.Drawing.Image`保存为BMP格式到内存流中。 5. 将内存流的位置重置回开始,以便`BitmapImage`可以读取数据。 6. 结束初始化`BitmapImage`,此时它已经加载了图像数据。 7. 返回转换后的`BitmapImage`作为`ImageSource`。 接下来是将`System.Drawing.Image`转换为字节流的方法`ImageToByte`。这个方法的主要用途可能是将图片保存到数据库或网络传输。步骤如下: 1. 创建一个新的`Bitmap`对象,`sceneImage`,用于复制输入的`System.Drawing.Image`,这是因为原图像可能被其他引用持有,无法直接修改。 2. 创建一个`MemoryStream`,用于存储字节流数据。 3. 使用JPEG格式保存`sceneImage`到内存流中,这一步将图像转换为字节序列。 4. 创建一个`byte`数组,长度等于内存流的长度,用于存储字节流数据。 5. 将内存流的位置重置回开始,并读取所有数据到`byte`数组中。 6. 返回包含图像数据的字节数组。 最后,代码中还提到了一个方法的摘要,即`ByteToImage`,这个方法应该是将字节流转换回`System.Drawing.Image`,但具体实现没有提供。通常,这个过程会反向操作:创建一个新的`MemoryStream`,将字节流写入该流,然后用`Image.FromStream`方法读取图像数据。 这些转换方法在处理C#中的图像资源时非常实用,尤其是在Winform和WPF混合开发或者需要在网络或数据库中存储和传输图像数据的场景下。理解并掌握这些转换技巧对于提升C#应用的图像处理能力至关重要。