目前,我们正在确定图像的大小,以及图像是否包含颜色,方法是将图像转换为Bitmap并检查height/width,然后检查PixelFormat中的System.Drawing.Imaging.PixelFormat.Format1bppIndexed类型以检测颜色。
不过,我注意到,单步执行代码,初始化这个Bitmap可能需要3-5秒(至少对于非常高分辨率的TIF图像):
ms = new MemoryStream(fileBytes);
bitmap = new System.Drawing.Bitmap(ms);有没有一种更快的方法来检查这两件事,直接从字节数组开始,这样我就可以避免Bitmap类的缓慢,或者这只是大TIF图像所期望的吗?
发布于 2015-07-23 00:35:35
这并不完全是我所希望的答案,所以我将继续讨论,但我确实想至少提到一个可能的“答案”。我最初的问题是加载Bitmap很慢。
我偶然发现了this MSDN article,它解释了Image.FromStream()为什么有一个重载,允许您告诉它不要验证图像数据。默认情况下,它设置为true。通过使用这个新的重载,并将validateImageData设置为false -这将极大地提高速度。
举个例子:
using (FileStream fs = new FileStream(this.fileInfo.FullName, FileMode.Open, FileAccess.ReadWrite))
{
using (Image photo = Image.FromStream(fs, true, false))
{
// do stuff
}
}这篇文章的作者发现他的代码运行速度快了93倍(!)。
https://stackoverflow.com/questions/31542808
复制相似问题