Что означает код HRESULT 0x88982F8C (WINCODEC_ERR_INSUFFICIENTBUFFER)?

 
Предыдущий Следующий
WINCODEC_ERR_COMPONENTINITIALIZEFAILURE WINCODEC_ERR_DUPLICATEMETADATAPRESENT

WINCODEC_ERR_INSUFFICIENTBUFFER

Ёмкость буфера должна соответствовать байтовому контракту метода WIC

WINCODEC_ERR_INSUFFICIENTBUFFER означает, что хранилище вызывающей стороны не вмещает требуемый результат. При копировании пикселей ёмкость зависит от исходного прямоугольника, формата пикселей, шага строки и общего размера буфера; путаница пикселей с байтами или использование невыровненного размера строки часто приводит к недостаточному выделению. Другие API WIC используют схему «сначала число, затем заполнение» и отдельно возвращают требуемое число элементов или байтов.

Диагностика должна сохранять все размеры вызова. Для больших или недоверенных изображений особенно важно переполнение при умножении: обёрнутое height × stride может выделить маленький буфер, хотя каждое измерение по отдельности допустимо. Увеличение произвольной константы скрывает ошибку расчёта и всё равно сломается на другом изображении.

Проверки расчёта размера

  • Запишите ширину, высоту, бит на пиксель, исходный прямоугольник, шаг строки и размер буфера в байтах.
  • До выделения памяти и передачи размера WIC проверяйте арифметику на переполнение.
  • Следуйте двухвызовной схеме перечисления, если API возвращает требуемое число элементов.
  • Синхронизируйте изменения выходного формата декодера с расчётом шага строки.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.