Блок задач

12. Многопоточность

Сложность 6

Задача «Масштабирование изображений»

При последовательной обработке видео, часто возникают проблемы с производительностью. Особенно остро проблема возникает при обработке 4k видео (3840x2160 и более)

Постановка задачи

Разработать класс, позволяющий изменять размеры картинок используя пул потоков.

Замечание

  1. Изменение размера возможно в 'не кратное' кол-во раз. Например: 1280x720 -> 720x576 уменьшение в 1.777777777777778 раз, или наорборот 720x576 -> 1280x720 увеличение в 1.777777777777778 раз.

  2. Необходимо различать увеличение и уменьшение картинок.

    • Увеличение картинок можно делать интерполяцией по двум соседним, исходным пикселям с весами соответствующими текущему (дробному) шагу.
    • Уменьшение - вычисление среднего значения 'схлопывающихся' пикселей.
  3. Распределение на потоки обработки, должно происходить путём разбиения картинок (исходной и конечной) на горизонтальные полосы (слайсы) и пердачей их (слайсы) на индивидуальную обработку.

  4. Необходимо предусмотреть многократное применение одного экземпляра класса (для разных картинок).