c# - 使用 image.FromStream 方法从 byte[] 转换为 image
问题描述
我尝试将已经在 byte[] 中的数据库中的图像数据转换回图像,并且使用 Image.FileStream 得到“无效参数错误”。拜托,谁能帮我解决这个问题?
我尝试使用各种方法解决代码,最后一个在我的代码下方。
byte[] data = validaccount.FingerPrint;
try
{
using (MemoryStream strm = new MemoryStream())
{
strm.Write(data, 0, data.Length);
strm.Position = 0;
System.Drawing.Image img = System.Drawing.Image.FromStream(strm);
BitmapImage bi = new BitmapImage();
bi.BeginInit();
MemoryStream ms = new MemoryStream();
img.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
ms.Seek(0, SeekOrigin.Begin);
bi.StreamSource = ms;
bi.EndInit();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
该代码应该将其转换byte[]
为图像。
解决方案
根据文档,如果“流没有有效的图像格式”, Image.FromStream(stream) 将引发参数异常。您是否验证了数据实际上是正确的?如果是这样,它是什么类型的图像?
你在滥用你的信息流。您只需要 1 个内存流,它有一个接受字节数组的构造函数(无需自己编写字节)。确保将其包装在 using 块中(就像您为第一个流所做的那样)。
您可能不想使用 BitmapImage - 这适用于 xaml/wpf 应用程序。您可能想要继承/扩展 System.Drawing.Image 的 System.Drawing.Bitmap。此外,Bitmap 有一个构造函数,它接受一个流 - 不需要使用 FromStream。
最后,Image(以及 Bitmap,因为 Bitmap 继承了 Image)实现了 IDisposable,因此您还应该将它包装在 using 块中。
PS 这是一个重复的问题。
推荐阅读
- r - 使用xlsx编写excel文件的for循环?
- php - 将 CSV 文件中的数据插入数据库
- php - 在 PHP中单击时,URL 查询字符串参数未显示在 url中
- ios - 权限问题?无法打开文件 - 文件被禁用
- python - 在“名称”列中仅显示一个名称
- python - 尝试使用 tf.keras.utils.plot_model 时,带有 TimeDistributed Layers 的 CNN-LSTM 表现异常
- python - 为什么这里的currentPath[-1]会忽略第一个find_paths_recursive(currentNode.left, required_sum - currentNode.val, currentPath, allPaths)?
- datagrip - javax.net.ssl.SSLHandshakeException:客户端首选项不接受服务器选择的协议版本 TLS10 [TLS13,TLS12]
- google-apps-script - 用不同的列创建一个新数组
- postgresql - 使用动态 SQL 的参数化 PostgreSQL 函数的语法