В c # при сравнении двух изображений хотелось бы использовать модель изображения XML вместо пикселей - PullRequest
0 голосов
/ 18 декабря 2018

Я SDE / T, и мне нужно написать метод, который сравнивает два изображения, чтобы гарантировать, что изображение во время теста соответствует ожидаемым результатам.Я хотел бы сделать модель изображения XML и просто сравнить этот XML с ожидаемой моделью XML (используя отказоустойчивость, чтобы учесть небольшие различия).

Я нашел эту статью в StackOverflow об отправке данных изображения в XML: Ссылка

Я нашел эту статью в Википедии о формате растрового изображения: Формат растрового изображения

Я нашел статью в CodePlex, в которой можно превратить растровый объект в 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
  • сжатие

Возможно, я могу каким-то образом сделать хеш-значение для самих данных изображения, но тогда мне нужнопонять, как ввести отказоустойчивость в такой расчет.Любые предложения приветствуются.

1 Ответ

0 голосов
/ 18 декабря 2018

Предполагая, что вы используете System.Drawing.Bitmap, большая часть необходимой информации доступна в виде свойств этого объекта: https://docs.microsoft.com/en-us/dotnet/api/system.drawing.bitmap?view=netframework-4.7.2,, например:

  • Размер
  • PhysicalDimension
  • Флаги (содержит информацию об альфа-канале)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...