GDI + получить количество анимированных GIF-циклов всегда на 1 меньше, чем есть на самом деле? - PullRequest
1 голос
/ 20 октября 2019

Я использую gdi + для получения числа анимированных циклов gif. Когда я тестировал код с помощью созданных мной самих картинок, я обнаружил, что это число всегда на 1 меньше, чем на самом деле, как в IE11 и Chrome,

за исключением того, что я установил счетчик циклов как 1, это будет 1, это правильно,

, если я установлю счетчик циклов как 2,3, и так далее, код получит его как 1,2, и такon.

Несмотря на то, что GIF-файлы с количеством циклов 1 и 2 воспроизводятся правильно в IE11 и Chrome, код получает то же значение, что и 1.

Не могу догадаться, есть ли что-то вGIF-файл выражает, будет он повторяться или нет.

После того, как я использую командный инструмент gifsicle, чтобы вывести информацию о gif, я нашел разницу в числе циклов 1 и 2 gifs, число циклов 2 gif имеет строку

счетчик циклов 1

в то время как счетчик циклов 1 gif не имеет.

Но я не знаю, что такое код gdi +, чтобы различать разницу.

Это код:

// new Bitmap
m_pBitmap = new Bitmap(szFilePath);

// get loop count
PropertyItem* pPropLoopCount;
UINT uSize = m_pBitmap->GetPropertyItemSize(PropertyTagLoopCount);
PropertyItem* pPropertyItem = (PropertyItem*)new char[uSize];
Status status = m_pBitmap->GetPropertyItem(PropertyTagLoopCount, uSize, pPropertyItem);
if (Status::Ok != status)
    return false;
m_sLoopCount = *((SHORT*)pPropLoopCount->value);

документ MSDN только что сказал:

Для анимированного изображения в формате GIF - количество раз, когда отображается анимация. Значение 0 указывает, что анимация должна отображаться бесконечно.

about PropertyTagLoopCount .

В конце концов, два вопроса:

  1. Является ли количество циклов полученного кода фактическим временем воспроизведения минус 1?
  2. Что такое код gdi + для различения фактического количества циклов 1 и 2 GIF?
...