C#图片转换方法:从System.Drawing.Image到System.Windows.Media.ImageSource
3星 · 超过75%的资源 需积分: 9 187 浏览量
更新于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#应用的图像处理能力至关重要。
668 浏览量
1529 浏览量
148 浏览量
490 浏览量
222 浏览量
615 浏览量
639 浏览量
点击了解资源详情
2024-10-08 上传
心猿意猴
- 粉丝: 6
最新资源
- MATLAB图像批处理:获取文件列表与自动转换技术
- 智能制造系统解决方案资料包下载指南
- Note-it:高效信息记录与管理工具
- Python基础语法合集:初学者指南
- Python文件操作技巧:从打开到编码全方位解析
- 为台式设备添加网站语言支持:react-language-keyboard技术解析
- React App入门指南:项目构建与脚本使用
- 探索p5.js实现的蛇形游戏开发技巧
- 使用Docker构建Go语言的Oracle客户端
- 幼儿园必备:英文字母歌Flash动画课件
- eGalaxTouch触控驱动更新5.12.0.12204详细说明
- CUDA加速的高斯混合模型预期最大化在matlab中的实现
- SimpleEngine: 高度模块化的Java 2D游戏开发引擎
- Python文本文件读写全攻略:掌握基本操作与步骤
- 法明德拉 - HTML技术探讨
- 星巴克菜单数据分析:卡路里与胆固醇的探索