Я использую 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?
- Что такое код gdi + для различения фактического количества циклов 1 и 2 GIF?