[C#]image与byte数组的相互转换

本文详细介绍了如何使用MemoryStream进行图像数据的保存与获取,包括如何将图像数据保存到MemoryStream中,并通过二次加载实现图像的显示与操作。
部署运行你感兴趣的模型镜像

 

正在做这个,放在这边留着以后参考

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

C#中将字节数组转换为图像,通常使用`MemoryStream`结合`Image.FromStream`方法实现。然而,根据引用内容,若在转换过程中出现“参数无效”的异常,可能数据流的格式、内存流的位置或数据完整性有关[^1]。 以下是一个经过验证的实现方法: ### 示例代码 ```csharp public Image ByteArrayToImage(byte[] byteArray) { if (byteArray == null || byteArray.Length == 0) { return null; } using (MemoryStream ms = new MemoryStream(byteArray)) { ms.Seek(0, SeekOrigin.Begin); // 确保流的位置在开始处 Image image = Image.FromStream(ms); return image; } } ``` ### 常见问题解决方案 1. **流的位置问题**:在使用`MemoryStream`时,如果未将流的位置重置为起始位置(使用`Seek(0, SeekOrigin.Begin)`),可能导致`Image.FromStream`读取失败。因此,在创建`MemoryStream`后,应确保调用`Seek`方法重置位置[^3]。 2. **数据完整性验证**:确保字节数组中的数据是完整的图像数据,且未被截断或损坏。例如,若摄像头传输的数据格式为16位色深,需确认其是否符合图像编码标准(如BMP、JPEG等)。 3. **图像格式兼容性**:`Image.FromStream`依赖于图像的格式标识。若字节数组中的数据格式不被支持,或未正确包含图像头信息,将导致加载失败。可尝试使用`Bitmap`类替代,或检查图像格式是否匹配。 4. **内存流生命周期管理**:确保`MemoryStream`在图像加载后仍保持有效。若在加载图像前就释放了流,可能导致访问无效数据。因此,推荐使用`using`语句确保流的正确释放。 ### 示例调用 ```csharp byte[] g = new byte[153600]; // 假设已从摄像头读取数据 for (int i = 0; i < g.Length; i++) { g[i] = Convert.ToByte(sp.ReadByte()); } Image img = ByteArrayToImage(g); pictureBox.Image = img; ``` 通过上述方法,可以有效解决字节数组转换为图像时可能出现的问题,确保图像正确加载并显示在控件中。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值