将字节数组转换为图像会抛出“参数”无效

本文关键字:参数 无效 图像 字节数 字节 数组 转换 | 更新日期: 2023-09-27 18:03:41

我试图将几个字节数组(存储在SQL Server 2008 R2 varbinary(8000))转换为图像,以便我可以将它们附加到PDF文件(数据的示例如下)。当从MemoryStream创建图像时,我一直得到"参数无效"。有什么帮助吗?

MemoryStream memoryStream = new MemoryStream(byteArray);
Image image = Image.FromStream(memoryStream);
Bitmap bitmap = new Bitmap(image);

0 x0a020101000000005e006500fa00fa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c00010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c0c7000fc2ffc1fe80c70007c2ffc1fe1fc7ffc1f03fc1ffc1fe3fc7ffc1f807c1ffc1fe3fc8ffc1f3c1ffc1fe3fc8ffc1fec1ffc1fe3fc8ffc1fe7fc1fe3fc9ffbfc1fe3fc9ffc1dfc1fe3fc9ffc1cfc1fe3fc9ffc1f3c1fe3fc9ffc1fbc1fe3fc9ffc1f9c1fe3fc9ffc1f9c1fe3fc9ffc1fcc1fe3fc9 ffc1fe7e3fc9ffc1fe7e3fcaff7e3fc2ffc1fcc20007c4ff3e3fc2ffc1f8c300c4ff3e3fc2ffc1f1c2ffc1fc7fc3ff3e3fc2ffc1f1c2ffc1fc3fc3ff3e3fc2ffc1f1c3ff9fc3ff3e3fc2ffc1f1c3ffc1cfc3ff3e3fc2ffc1f1c3ffc1e7c3ff3e3fc2ffc1f1c3ffc1f3c3ff3e3fc2ffc1f1c3ffc1f3c3ff3e3fc2ffc1f1c3ffc1f3c3ff3e3fc2ffc1f1c3ffc1f3c3ff3e3fc2ffc1f1c3ffc1f3c3ff3e3fc2ffc1f1c3ffc1f3c3ff3e3fc2ffc1f1c3ffc1f3c2ffc1fe7e3fc2ffc1f1c3ffc1e7c2ffc1fe7e3fc2ffc1f1c3ffc1c7c2ffc1fcc1fe3fc2ffc1f1c3ffc1c7c2ffc1f9c1fe3fc2ffc1f1c3ffc1dfc2ffc1f9c1fe3fc2ffc1f1c3ffbfc2 ffc1f9c1fe3fc2ffc1f1c2ffc1fc3fc2ffc1f3c1fe3fc2ffc1f0c2ffc1f8c3ffc1e7c1fe3fc2ffc1fec2000fc3ffc1cfc1fe3fc3ffc2000fc3ff9fc1fe3fc9ff3fc1fe3fc8ffc1fe7fc1fe3fc8ffc1f0c1ffc1fe3fc8ffc1e7c1ffc1fe3fc8ffc1cfc1ffc1fe3fc8ff8fc1ffc1fe3fc8ffc1e0c1ffc1fe3fc8ffc1f8c1ffc1fe3fc8ffc1fc1fc1fe3fc9ff8fc1fe3fc9ffc1e7c1fe3fc9ffc1f0c1fe3fc9ffc1fe7e3fcaff7e3fc2ffc1fcc300c4ff3e3fc2ffc1f8c3001fc3ff3e3fc2ffc1f1c3ff8fc3ff9e3fc2ffc1f1c3ff87c3ffc1ce3fc2ffc1f1c3ffc1f3c3ffc1ce3fc2ffc1f1c3ffc1f9c3ffc1ee3fc2ffc1f1c3ffc1fcc3ffc1e43FC2FFC1F1C3FFC1FE7FC2FFC1E43FC2FFC1F1C4FF3FC2FFC1E43FC2FFC1F1C4FF1FC2FFC1F03FC2FFC1F1C4FF1FC2FFC1F83FC2FFC1F1C4FF1FC2FFC1F83FC2FFC1F1C4FF1FC2FFC1F83FC2FFC1F1C4FF1FC2FFC1F83FC2FFC1F1C4FF1FC2FFC1F83FC2FFC1F1C4FF1FC2FFC1F83FC2FFC1F1C4FF1FC2FFC1F83FC2FFC1F1C3FFC1FE7FC2FFC1F83FC2FFC1F1C3FFC1FEC3FFC1F83FC2FFC1F1C3FFC1F9C3FFC1F83FC2FFC1F1C3FFC1F3C3FFC1F83FC2FFC1F1C3FFC1F7C3FFC1F83FC2FFC1F1C2FFC1FE0FC3FFC1F83FC2FFC1F0C3003FC3FFC1F83FC2FFC1F8C20001C4FFC1F83FC2FFC1FCC20003C4FFC1FC3FCAFFC1E43FCAFFC1E43FCAFFC1E43FCAFFC1EE3FCAFFC1EE3FCAFFC1CE3FCAFF3E3FCAFF7E3FC9FFC1FE7E3FC9FFC1FE7E3FC9FFC1FCC1FE3FC9FFC1F1C1FE3FC9FFC1C3C1FE3FC9FFC1DFC1FE3FC9FF9FC1FE3FC8FFC1E07FC1FE3FC8FFC1C1C1FFC1FE1FC7FF001FC1FFC1FEC9003FC1FFC1FE80C700C3FFC1FEC1C0C700C3FFC1FE

将字节数组转换为图像会抛出“参数”无效

% file output 
output: PCX ver. 2.8 image data, with palette

在linux下,我刚刚将十六进制流从纯文本转换为二进制文件output

回声"0 a020101000000005e006500fa00fa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010c00010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1c0c7000fc2ffc1fe80c70007c2ffc1fe1fc7ffc1f03fc1ffc1fe3fc7ffc1f807c1ffc1fe3fc8ffc1f3c1ffc1fe3fc8ffc1fec1ffc1fe3fc8ffc1fe7fc1fe3fc9ffbfc1fe3fc9ffc1dfc1fe3fc9ffc1cfc1fe3fc9ffc1f3c1fe3fc9ffc1fbc1fe3fc9ffc1f9c1fe3fc9ffc1f9c1fe3fc9ffc1fcc1fe3fc9ffc1 fe7e3fc9ffc1fe7e3fcaff7e3fc2ffc1fcc20007c4ff3e3fc2ffc1f8c300c4ff3e3fc2ffc1f1c2ffc1fc7fc3ff3e3fc2ffc1f1c2ffc1fc3fc3ff3e3fc2ffc1f1c3ff9fc3ff3e3fc2ffc1f1c3ffc1cfc3ff3e3fc2ffc1f1c3ffc1e7c3ff3e3fc2ffc1f1c3ffc1f3c3ff3e3fc2ffc1f1c3ffc1f3c3ff3e3fc2ffc1f1c3ffc1f3c3ff3e3fc2ffc1f1c3ffc1f3c3ff3e3fc2ffc1f1c3ffc1f3c3ff3e3fc2ffc1f1c3ffc1f3c3ff3e3fc2ffc1f1c3ffc1f3c2ffc1fe7e3fc2ffc1f1c3ffc1e7c2ffc1fe7e3fc2ffc1f1c3ffc1c7c2ffc1fcc1fe3fc2ffc1f1c3ffc1c7c2ffc1f9c1fe3fc2ffc1f1c3ffc1dfc2ffc1f9c1fe3fc2ffc1f1c3ffbfc2ffc1 f9c1fe3fc2ffc1f1c2ffc1fc3fc2ffc1f3c1fe3fc2ffc1f0c2ffc1f8c3ffc1e7c1fe3fc2ffc1fec2000fc3ffc1cfc1fe3fc3ffc2000fc3ff9fc1fe3fc9ff3fc1fe3fc8ffc1fe7fc1fe3fc8ffc1f0c1ffc1fe3fc8ffc1e7c1ffc1fe3fc8ffc1cfc1ffc1fe3fc8ff8fc1ffc1fe3fc8ffc1e0c1ffc1fe3fc8ffc1f8c1ffc1fe3fc8ffc1fc1fc1fe3fc9ff8fc1fe3fc9ffc1e7c1fe3fc9ffc1f0c1fe3fc9ffc1fe7e3fcaff7e3fc2ffc1fcc300c4ff3e3fc2ffc1f8c3001fc3ff3e3fc2ffc1f1c3ff8fc3ff9e3fc2ffc1f1c3ff87c3ffc1ce3fc2ffc1f1c3ffc1f3c3ffc1ce3fc2ffc1f1c3ffc1f9c3ffc1ee3fc2ffc1f1c3ffc1fcc3ffc1e43fc2fFC1F1C3FFC1FE7FC2FFC1E43FC2FFC1F1C4FF3FC2FFC1E43FC2FFC1F1C4FF1FC2FFC1F03FC2FFC1F1C4FF1FC2FFC1F83FC2FFC1F1C4FF1FC2FFC1F83FC2FFC1F1C4FF1FC2FFC1F83FC2FFC1F1C4FF1FC2FFC1F83FC2FFC1F1C4FF1FC2FFC1F83FC2FFC1F1C4FF1FC2FFC1F83FC2FFC1F1C4FF1FC2FFC1F83FC2FFC1F1C3FFC1FE7FC2FFC1F83FC2FFC1F1C3FFC1FEC3FFC1F83FC2FFC1F1C3FFC1F9C3FFC1F83FC2FFC1F1C3FFC1F3C3FFC1F83FC2FFC1F1C3FFC1F7C3FFC1F83FC2FFC1F1C2FFC1FE0FC3FFC1F83FC2FFC1F0C3003FC3FFC1F83FC2FFC1F8C20001C4FFC1F83FC2FFC1FCC20003C4FFC1FC3FCAFFC1E43FCAFFC1E43FCAFFC1E43 fcaffc1ee3fcaffc1ee3fcaffc1ce3fcaff3e3fcaff7e3fc9ffc1fe7e3fc9ffc1fe7e3fc9ffc1fcc1fe3fc9ffc1f1c1fe3fc9ffc1c3c1fe3fc9ffc1dfc1fe3fc9ff9fc1fe3fc8ffc1e07fc1fe3fc8ffc1c1c1ffc1fe1fc7ff001fc1ffc1fec9003fc1ffc1fe80c700c3ffc1fec1c0c700c3ffc1fe"| XXD -p -r>输出

,然后是file output的简单部分,从实用程序file中获得文件格式的名称。

首先,确保您知道编码,如Image。FromStream方法只知道有限的几种格式。

确保你的MemoryStream的位置被正确地设置为0,而不是结束-否则,任何读将从末尾开始,而不是从开始。

还要注意

此构造函数不公开底层流。GetBuffer抛出UnauthorizedAccessException.1

因此,这可能是由Bitmap处理底层流的某些方式引起的。如果需要,尝试创建一个空内存流,将字节复制到其中,然后重置位置

MemoryStream memoryStream = new MemoryStream();
foreach(var b in byteArray) memoryStream.WriteByte(b);
memoryStream.Position = 0;
Image image = Image.FromStream(memoryStream);

您给出的字节数组长度为1117字节。它不能被4或3整除,所以我很确定图像不是原始字节,实际上是用某种图像格式编码的。

image . fromstream()方法在不知道格式的情况下无法解码编码的图像,并且您给出的字节数组没有指定该格式是什么。因此,您给出的参数无效。如果您知道图像的格式,您可以尝试在图像的其余部分之前将头部插入字节数组,看看这是否有帮助。奇怪的是,你有图像,但没有它的标题,虽然它似乎也不是一个base-64字符串。

在不知道图像格式的情况下,很难将这些字节数组转换为图像。你有办法查出是什么吗?如何检索图像数据存储?