如何检查MemoryStream是否可以转换为.NET中的Bitmap?

时间:2010-03-27 04:20:01

标签: c# .net

正如提到的问题,我有Byte[] ByteArr的内存流。在将其与位图myImg = new Bitmap(memorystream)一起使用之前,如何检查它是否可以转换为位图。

更新问题:在我的情况下,我通过网址从互联网上加载图片,如果已经下载了Img,我将位图更改为base64string,如果没有下载,我将网址更改为base64string。然后我保存在xml文件中。下次从XML加载并将base64String更改为byte[]时,byte[]可以是字符串或位图。所以我想在转换它之前检测来自byte[]的内存流是哪种类型(图像或字符串)。

4 个答案:

答案 0 :(得分:3)

.NET支持许多图像文件格式。您无法合理地筛选所有可能格式的内存流内容。在图像标题中查找cookie是不够的,如果图像数据有问题或者图像恰好以.NET解码器不支持的格式存储,图像可能仍然无法加载。

解决这个问题:只需加载图片即可。如果它有问题,你会得到一个响亮的抱怨。赶上例外。

答案 1 :(得分:2)

我对位图的理解是它是一种非常简单的格式 - 没有压缩等。有一些标题,其余的是像素RGB值。因此,大多数内存流应该作为BMP有效,但如果它们没有 - 你会得到一个例外。我说可以尝试转换它并获得异常或错误代码,如果它格式不正确。

http://en.wikipedia.org/wiki/BMP_file_format

答案 2 :(得分:2)

检查第一个字节是否为0x42。如果不是,那么它不是位图。如果是,则将其传递给Bitmap构造函数并捕获任何异常以查找0x42为误报的情况。

答案 3 :(得分:1)

实际上,维基是你的朋友。查看BMP文件头部分以获取一些信息: BMP File Format