C#图片转换方法:从System.Drawing.Image到System.Windows.Media.ImageSource
3星 · 超过75%的资源 需积分: 9 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#应用的图像处理能力至关重要。
2009-01-19 上传
161 浏览量
2020-12-31 上传
2012-12-13 上传
2018-04-12 上传
2020-04-19 上传
2020-09-05 上传
2020-04-12 上传
点击了解资源详情
心猿意猴
- 粉丝: 6
- 资源: 16
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍