【问题标题】:In c#, when comparing two images, would like to use an XML image model instead of pixels在 C# 中,比较两个图像时,想使用 XML 图像模型而不是像素
【发布时间】:2018-12-17 23:59:34
【问题描述】:

我是 SDE/T,我需要编写一个比较两个图像的方法,以确保测试期间的图像符合预期结果。我想制作图像的 XML 模型,然后将该 XML 与预期的 XML 模型进行比较(使用容错以允许细微差异)。

我发现了这篇关于将图像数据发送到 XML 的 StackOverflow 文章:Link

我发现这篇关于位图格式的维基百科文章:Bitmap Format

我在 CodePlex 中发现了一篇文章,它允许您将 Bi​​tmap 对象转换为 XML。但我想编码某些图像元数据。

这是 CodePlex 文章中用于将数据导出为 XML 的方法:

public void ExportToXML(Dictionary<string, Bitmap> BmpList, string Filename)
    {
        XmlNode node = null;
        XmlNode subnode = null;
        XmlAttribute attr = null;
        XmlDocument doc = new XmlDocument();
        if (System.IO.File.Exists(Filename))
            doc.Load(Filename);
        // Select or create a Graphics root node
        XmlNode root = doc.SelectSingleNode("/Graphics");
        if (root == null)
        {
            root = doc.CreateNode(XmlNodeType.Element, "Graphics", null);
            doc.AppendChild(root);
        }
        // If the Symbols section exists, get rid of it
        node = root.SelectSingleNode("descendant::Symbols");
        if (node != null)
            root.RemoveChild(node);
        // Create a new Symbols section
        node = doc.CreateNode(XmlNodeType.Element, "Symbols", null);
        root.AppendChild(node);
        // Save the pattern info
        foreach (string bmpName in BmpList.Keys)
        {
            Bitmap bmp = BmpList[bmpName];
            // what about RGB and alpha channel info?
            subnode = doc.CreateNode(XmlNodeType.Element, "symbol", null);
            attr = doc.CreateAttribute("name");
            attr.Value = bmpName;
            subnode.Attributes.Append(attr);
            byte[] bb = ByteArrayFromBitmap(ref bmp);
            string ss = Convert.ToBase64String(bb); 
            attr = doc.CreateAttribute("bitmap");
            attr.Value = ss;
            subnode.Attributes.Append(attr);
            node.AppendChild(subnode);
        }
        doc.Save(Filename);
    }

有人可以建议一种获取有关位图图像信息的方法吗?我认为这可能是在测试中处理图像的一种更强大的方法。

可能要编码的元数据:

  • 图像名称
  • 图像大小
  • 图像日期
  • Alpha 通道信息
  • 像素格式
  • ICC 颜色配置文件
  • 压缩

也许我可以以某种方式为图像数据本身创建一个哈希值,但是我需要了解如何在这样的计算中引入容错。非常感谢任何建议。

【问题讨论】:

标签: c# image model


【解决方案1】:

假设您使用的是System.Drawing.Bitmap,您想要的很多信息都可以作为该对象的属性:https://docs.microsoft.com/en-us/dotnet/api/system.drawing.bitmap?view=netframework-4.7.2,例如:

  • 尺寸
  • 物理维度
  • 标志(其中包含有关 Alpha 通道的信息)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-13
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 2011-01-09
    • 1970-01-01
    相关资源
    最近更新 更多