在 C# 中,比较两个图像时,想使用 XML 图像模型而不是像素

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

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

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

我在 CodePlex 中发现了一篇文章,它允许您将 Bitmap 对象转换为 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);

    }

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

可能要编码的元数据:

  • 图片名称

  • 图片尺寸

  • 图片日期

  • 阿尔法通道信息

  • 像素格式

  • ICC 颜色配置文件

  • 压缩

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


吃鸡游戏
浏览 118回答 1
1回答

慕桂英546537

假设您正在使用System.Drawing.Bitmap,您想要的很多信息都可以作为该对象的属性:https://docs.microsoft.com/en-us/dotnet/api/system.drawing.bitmap?view=netframework-4.7。 2,例如:尺寸物理维度标志(这包含有关 Alpha 通道的信息)
打开App,查看更多内容
随时随地看视频慕课网APP