【问题标题】:fastest way to detect A) color and B) size of image from byte[]从 byte[] 检测 A) 颜色和 B) 图像大小的最快方法
【发布时间】:2015-07-21 15:03:18
【问题描述】:

目前,我们通过将图像转换为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 图像的预期结果?

【问题讨论】:

  • 大概您可以深入研究tiff 文件格式并弄清楚如何读取标题并仅提取您需要的信息。
  • 感谢您的回复 - 我也想过这个问题,但我远不是成像专家,甚至不知道从哪里开始。
  • 我绝不是专家,但看起来here 看起来就像任何开始的地方一样好。看起来您需要阅读标题,它将告诉您在哪里可以找到“图像文件目录”,并且应该包含具有大小和颜色深度的标签。
  • 谢谢 - 我会调查的!

标签: c# image bitmap


【解决方案1】:

这不是我所希望的答案,所以我会保持打开状态,但我确实想至少提及一个可能的“答案”。我最初的问题是加载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 倍 (!)。

【讨论】:

    猜你喜欢
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 2014-08-05
    • 1970-01-01
    • 2016-04-02
    相关资源
    最近更新 更多