C# 图片格式转换与二进制操作
4星 · 超过85%的资源 需积分: 20 161 浏览量
更新于2024-09-23
2
收藏 12KB TXT 举报
本文主要介绍如何在C#中进行图片格式转换,包括将图片转换为二进制(byte[])、二进制转回图片、以及使用XML存储二进制图片数据的方法。此外,还提供了字符串与二进制之间的转换方法,并展示了如何将Stream对象转换为字节数组和反向转换的实用函数。
在C#编程中,处理图像时经常会遇到需要转换图像格式或数据类型的情况。以下是一些关键知识点:
1. 图片转二进制(byte[]):
当我们需要将图片保存在内存中或者在网络上传输时,通常会将其转换为二进制数据。以下代码演示了如何将图片转换为byte[]:
```csharp
Image img = Image.FromFile("path_to_image.jpg");
MemoryStream ms = new MemoryStream();
img.Save(ms, ImageFormat.Jpeg); // 或者其他格式如Png, Bmp等
byte[] bytes = ms.ToArray();
```
2. 二进制转图片:
将之前转换得到的二进制数据还原为图片,可以使用`Image.FromStream`方法:
```csharp
MemoryStream ms = new MemoryStream(bytes);
ms.Position = 0;
Image img = Image.FromStream(ms);
ms.Close();
```
3. XML保存二进制图片:
如果需要将二进制数据存储在XML文件中,可以先将byte[]转换为Base64编码的字符串,然后在XML中存储该字符串:
```csharp
string base64String = Convert.ToBase64String(bytes);
// 在XML中保存base64String
```
读取时再反向转换:
```csharp
byte[] bytes = Convert.FromBase64String(base64String);
```
4. 字符串与二进制转换:
使用`UnicodeEncoding`类可以实现字符串到字节数组和字节数组到字符串的转换:
```csharp
UnicodeEncoding converter = new UnicodeEncoding();
string inputString = "your_string";
byte[] inputBytes = converter.GetBytes(inputString);
string outputString = converter.GetString(inputBytes);
```
5. Stream与byte[]转换:
- Stream转byte[]:可以创建一个大小等于Stream长度的字节数组,然后使用`Read`方法读取Stream数据:
```csharp
public byte[] StreamToBytes(Stream stream) {
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
stream.Seek(0, SeekOrigin.Begin);
return bytes;
}
```
- byte[]转Stream:将byte[]放入MemoryStream中返回:
```csharp
public Stream BytesToStream(byte[] bytes) {
Stream stream = new MemoryStream(bytes);
return stream;
}
```
6. Stream写入文件:
最后,如果你有一个Stream对象并想将其内容写入文件,可以使用以下方法:
```csharp
public void StreamToFile(Stream stream, string fileName) {
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
using (FileStream fileStream = new FileStream(fileName, FileMode.Create, FileAccess.Write)) {
fileStream.Write(bytes, 0, bytes.Length);
}
}
```
这些转换方法在处理图像数据、存储和传输时非常有用,确保了数据的准确性和效率。在实际开发中,根据具体需求,可能还需要考虑错误处理、内存管理等细节。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2021-01-20 上传
2020-08-31 上传
2020-09-06 上传
2020-12-31 上传
192 浏览量
2012-11-05 上传
h8g8j8
- 粉丝: 0
- 资源: 5
最新资源
- 深入浅出:自定义 Grunt 任务的实践指南
- 网络物理突变工具的多点路径规划实现与分析
- multifeed: 实现多作者间的超核心共享与同步技术
- C++商品交易系统实习项目详细要求
- macOS系统Python模块whl包安装教程
- 掌握fullstackJS:构建React框架与快速开发应用
- React-Purify: 实现React组件纯净方法的工具介绍
- deck.js:构建现代HTML演示的JavaScript库
- nunn:现代C++17实现的机器学习库开源项目
- Python安装包 Acquisition-4.12-cp35-cp35m-win_amd64.whl.zip 使用说明
- Amaranthus-tuberculatus基因组分析脚本集
- Ubuntu 12.04下Realtek RTL8821AE驱动的向后移植指南
- 掌握Jest环境下的最新jsdom功能
- CAGI Toolkit:开源Asterisk PBX的AGI应用开发
- MyDropDemo: 体验QGraphicsView的拖放功能
- 远程FPGA平台上的Quartus II17.1 LCD色块闪烁现象解析