C# 图片格式转换与二进制操作

4星 · 超过85%的资源 需积分: 20 66 下载量 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); } } ``` 这些转换方法在处理图像数据、存储和传输时非常有用,确保了数据的准确性和效率。在实际开发中,根据具体需求,可能还需要考虑错误处理、内存管理等细节。