.net 从MemoryStream加载位图时出错

.net 从MemoryStream加载位图时出错,.net,gdi+,bitmap,memorystream,.net,Gdi+,Bitmap,Memorystream,我正在尝试从内存流加载图像pdf和Word文档,以便在将它们添加到pdf之前对它们进行操作。每当我尝试加载位图或GIF时,我都会遇到一个可怕的GDI+错误 这个电话 System.Drawing.Bitmap myImage = System.Drawing.Image.FromStream(docStream); 生成此错误 System.Runtime.InteropServices.ExternalException occurred Message="A generic err

我正在尝试从内存流加载图像pdf和Word文档,以便在将它们添加到pdf之前对它们进行操作。每当我尝试加载位图或GIF时,我都会遇到一个可怕的GDI+错误

这个电话

System.Drawing.Bitmap myImage = System.Drawing.Image.FromStream(docStream);  
生成此错误

System.Runtime.InteropServices.ExternalException occurred
  Message="A generic error occurred in GDI+."
  Source="System.Drawing"
  ErrorCode=-2147467259
  StackTrace:
       at System.Drawing.Image.FromStream(Stream stream, Boolean useEmbeddedColorManagement, Boolean validateImageData)
       at System.Drawing.Image.FromStream(Stream stream)  
System.ArgumentException occurred
  Message="Parameter is not valid."
  Source="System.Drawing"
  StackTrace:
       at System.Drawing.Bitmap..ctor(Stream stream)
这个电话

System.Drawing.Bitmap myImage = new System.Drawing.Bitmap(docStream);
生成此错误

System.Runtime.InteropServices.ExternalException occurred
  Message="A generic error occurred in GDI+."
  Source="System.Drawing"
  ErrorCode=-2147467259
  StackTrace:
       at System.Drawing.Image.FromStream(Stream stream, Boolean useEmbeddedColorManagement, Boolean validateImageData)
       at System.Drawing.Image.FromStream(Stream stream)  
System.ArgumentException occurred
  Message="Parameter is not valid."
  Source="System.Drawing"
  StackTrace:
       at System.Drawing.Bitmap..ctor(Stream stream)
该代码适用于png、jpg和tif,但不适用于bmp或GIF

基本上是:

MemoryStream docStream = GetMemoryStream(filePath);
// The next line errors...
System.Drawing.Bitmap myImage = new System.Drawing.Bitmap(docStream);

    private MemoryStream GetMemoryStream(string file)
    {
        FileStream fs = null;
        Byte[] bytes;
        int len;

        fs = File.OpenRead(file);
        len = (int)fs.Length - 1;
        bytes = new Byte[len];
        fs.Read(bytes, 0, len);

        return new MemoryStream(bytes);

    }
我不会在任何地方关闭MemoryStream,除非png和jpg不受影响,否则我认为这不是问题所在。当我使用十六进制编辑器查看图像文件时,它似乎并不正确。我也尝试过不同的文件大小,以防万一

在这一点上,我几乎不知所措。任何帮助都将不胜感激

谢谢

    len = (int)fs.Length - 1;
不知道为什么你认为用VB编程是个好主意?去掉-1,您要读取所有字节,而不是所有减去最后一个字节的字节。File.ReadAllBytes将是一个不错的选择


不知道为什么你认为用VB编程是个好主意?去掉-1,您要读取所有字节,而不是所有减去最后一个字节的字节。File.ReadAllBytes将是一个不错的选择。

不能保证读取会填满缓冲区;简单地说,它必须返回一些数据。更常见的方法可能是:

byte[] buffer = new byte[2048];
int read;
while((read = source.Read(buffer, 0, buffer.Length)) > 0) {
    memStream.Write(buffer, 0, read);
}
memStream.Position = 0; //rewind to read it

无法保证读取会填满缓冲区;简单地说,它必须返回一些数据。更常见的方法可能是:

byte[] buffer = new byte[2048];
int read;
while((read = source.Read(buffer, 0, buffer.Length)) > 0) {
    memStream.Write(buffer, 0, read);
}
memStream.Position = 0; //rewind to read it

我通过转换器运行的是VB代码:愚蠢的谢谢。我通过一个转换器运行的是VB代码:愚蠢的谢谢