Преобразование в YUV 4: 4: 4 - Это чисто аффинное преобразование для каждого вектора RGB. Просто используйте правильную формулу для любого варианта YUV, который вам нужен. Вы, вероятно, также захотите разделить изображение на плоскости.
Преобразование в YUV 4: 2: 0 - это чисто проблема передискретизации. Вам нужно пересчитать плоскости U и V на половину ширины и половину высоты. НЕ просто пропустить выборки («выборка ближайшего соседа»); это приведет к очень уродливому алиасингу. Вы можете просто усреднить соответствующие квадраты 2х2 или использовать более продвинутый фильтр. В случае понижающей выборки, средняя площадь в любом случае довольно близка к идеальной; Гауссовский может дать слегка лучшие результаты.
Если вы не возражаете против использования библиотечного кода, libswscale из ffmpeg может выполнить оба эти шага за вас и сделает это очень быстро.
Наконец, перемещая маленькое изображение по большому: это чисто прямоугольное изображение или альфа-канал? В любом случае вам просто нужно зациклить координаты, в которых вы хотите, чтобы они появлялись, и вывести изображение для каждой точки. Если он прямоугольный, вы просто копируете пиксели, а если у него есть альфа-канал, вам нужно использовать его для альфа-смешения (интерполяция между значениями пикселей в соответствии со значением альфа).