无法将图像保存到MemoryStream

时间:2013-09-02 00:36:10

标签: c# .net wpf wcf system.drawing.imaging

我正在尝试将图像保存到MemoryStream以获取字节数组。

 using (MemoryStream ms = new MemoryStream()){
      // Convert Image to byte[]
      ms.Seek(0, SeekOrigin.Begin);
      img.Save(ms, ImageFormat.RawFormat);
      byte[] imageBytes = ms.ToArray();
      return imageByates;
  }

这段代码适用于具有以下属性的图像

Flags 77840
FrameDimensionList System.Guid[]
Heigth 2048
HorizontalResolution 72
Palette System.Drawing.Imaging.ColorPalette
PhysicalDimension {Width=1322, Height=2048}
Pixelformat Format24bppRgb
PropertyIDList 0 20625
PropertyIDList 1 20624
PropertyIDList 2 34675
PropertyItems System.Drawing.Imaging.PropertyItem
PropertyItems 0 System.Drawing.Imaging.PropertyItem
PropertyItems 1 System.Drawing.Imaging.PropertyItem
PropertyItems 2 System.Drawing.Imaging.PropertyItem
RawFormat [ImageFormat: b96b3cae-0728-11d3-9d7b-0000f81ef32e]
RawFormat height 2048 width 1322
Tag
VerticalResolution 72
Width 1322

我在gdi +中获得了一个臭名昭着的通用错误,用于具有以下属性的另一个图像

Flags 73744
FrameDimensionList System.Guid[]
Heigth 336
HorizontalResolution 96
Palette System.Drawing.Imaging.ColorPalette
PhysicalDimension {Width=251, Height=336}
Pixelformat Format24bppRgb
RawFormat [ImageFormat: b96b3cae-0728-11d3-9d7b-0000f81ef32e]
RawFormat height 336 width 251
Tag
VerticalResolution 96
Width 251

区别,前者是我从文件系统加载的jpeg图像(使用Image.FromFile)。后者是我通过SDK接收的图像,可能是从存储在网络中的数据库中取出的。图像均为System.Drawing.Image

这可能是什么问题?

1 个答案:

答案 0 :(得分:0)

从你的问题的最后一段需要更清晰。

  

后者是我通过SDK收到的图片,可能需要   它来自存储在网络中的数据库。图像都是   System.Drawing.Image对象

如果您从引用的SDK接收Stream,那么您只需要读取流以获取字节数组,无需使用Image.Save保存(...。

您将以哪种形式接收图像作为流对象或System.Drawing.Image对象?