TagGroupGetTagType возвращает неправильный тип - PullRequest
1 голос
/ 23 апреля 2020

По сути, это конкретный c вопрос для моего старого вопроса , который я просто не могу решить.

Мне дали пример изображения для моей разработки. Это изображение содержит (я думаю, представитель) TagGrop, который отображает информацию о том, как изображение создается.

Моя проблема в том, что TagGroupGetTagType() элементов этого TagGroup возвращает 3 для элементов, которые сами являются TagGroups. Но TagGroups имеет тип 0 (подтверждено мной и @BmyGuest в связанном вопросе). На следующем рисунке показан вывод моего примера сценария вместе с диалогом редактора тегов. Как видно, каждый элемент имеет тип 3, включая TagGroups, например Acquision или др.

Comparism of output and Tag Editor results

Изображение Выше был создан следующий скрипт:

clearResults();

image img;
img.GetFrontImage();
TagGroup tg = img.ImageGetTagGroup();

TagGroupOpenBrowserWindow(tg, 0);

for(number i = 0; i < tg.TagGroupCountTags(); i++){
    String label = tg.TagGroupGetTagLabel(i);
    number type = tg.TagGroupGetTagType(i, 0);

    result("Index " + label + " has type " + type + "\n");
}

Что я делаю не так? Почему это не работает? Есть ли способ получить правильный тип?

Это может быть связано с файлом, поэтому я создал файл примера, в котором отсутствуют некоторые индексы (для защиты конфиденциальности людей, которые дали мне этот файл) , Размещенный вывод фактически создается с этим файлом. Так возникает та же проблема. Этот файл можно загрузить с https://www.file-upload.net/download-14020685/example.dm4.html.

(Для тех, кто не любит скачивать файлы со случайных страниц, вы можете получить содержимое файла в кодировке base64 здесь: https://cutpaste.online/notes.html?id=xcix7x9e9sHxMFwF3e5h)

1 Ответ

1 голос
/ 23 апреля 2020

Подтверждение и обходной путь

Используя ваш сценарий и предоставленный файл, я могу точно воспроизвести результат.

Более того, если я выполню следующий скрипт (в GMS 3.4):

image img := RealImage("Test",4,10,10)
taggroup newTG = NewTagGroup()
newTG.TagGroupSetTagAsString("Test","oh")
img.imagegettaggroup().TagGroupSetTagAsTagGroup("TG",newTG)
img.ShowImage()

И затем запустить ваш скрипт, я получу:

Index GMS Version has type 0
Index TG has type 0

Однако, если я сохраню файл и затем снова откройте его и запустите ваш скрипт, я неожиданно получаю:

Index GMS Version has type 3
Index TG has type 3

Итак, что-то явно изменилось и отключено. Я попробовал некоторые старые данные (все сохраненные в GMS 3.x), и я всегда получаю тип 3 для TagGroups. Я не смог найти данные, сохраненные в GMS 2.x или GMS 1.x, но предположил, что один или оба вернут тип 0.

Я также заметил, что команда TagGroupGetTagTypeLength возвращает 0 перед сохранением, но 1 для загруженного изображения, и я думаю, что это может быть связано.

Но есть обходной путь, который вы можете использовать, чтобы решить реальный вопрос. Для TagGroups (и TagLists) вы можете заменить свою проверку на тип фактической попыткой получить тег в качестве TagGroup, например:

clearResults();

image img;
img.GetFrontImage();
TagGroup tg = img.ImageGetTagGroup();

TagGroupOpenBrowserWindow(tg, 0);

for(number i = 0; i < tg.TagGroupCountTags(); i++){
    String label = tg.TagGroupGetTagLabel(i);
    number typeL = tg.TagGroupGetTagTypeLength(i);
    number type = tg.TagGroupGetTagType(i, 0);

    result("Index " + label + " has " + typeL + " types. Type = " + type + "\n");
    TagGroup tgtest
    if ( tg.TagGroupGetIndexedTagAsTagGroup(i,tgtest) )
        Result("\tIt is as TagGroup (or TagList)!\n")
}
...