| Предыдущий | Следующий |
| WINCODEC_ERR_COMPONENTINITIALIZEFAILURE | WINCODEC_ERR_DUPLICATEMETADATAPRESENT |
WINCODEC_ERR_INSUFFICIENTBUFFER
Ёмкость буфера должна соответствовать байтовому контракту метода WIC
WINCODEC_ERR_INSUFFICIENTBUFFER означает, что хранилище вызывающей стороны не вмещает требуемый результат. При копировании пикселей ёмкость зависит от исходного прямоугольника, формата пикселей, шага строки и общего размера буфера; путаница пикселей с байтами или использование невыровненного размера строки часто приводит к недостаточному выделению. Другие API WIC используют схему «сначала число, затем заполнение» и отдельно возвращают требуемое число элементов или байтов.
Диагностика должна сохранять все размеры вызова. Для больших или недоверенных изображений особенно важно переполнение при умножении: обёрнутое height × stride может выделить маленький буфер, хотя каждое измерение по отдельности допустимо. Увеличение произвольной константы скрывает ошибку расчёта и всё равно сломается на другом изображении.
Проверки расчёта размера
- Запишите ширину, высоту, бит на пиксель, исходный прямоугольник, шаг строки и размер буфера в байтах.
- До выделения памяти и передачи размера WIC проверяйте арифметику на переполнение.
- Следуйте двухвызовной схеме перечисления, если API возвращает требуемое число элементов.
- Синхронизируйте изменения выходного формата декодера с расчётом шага строки.
Ссылки
- Microsoft: IWICBitmapSource::CopyPixels
- Microsoft: источники bitmap и форматы пикселей WIC
- Microsoft: контракты интерфейсов WIC
Нужно найти другой код? Найти другой код состояния или ошибки.