如何将160 * 70位图图像移动到640 * 280位图图像上,并在将两个位图图像转换为yuv 4:4:4并将其写入单个yuv文件后反射出边缘?以及如何将其转换为yuv 4:2:0?请问我如何在c中编码相同的代码?
答案 0 :(得分:3)
转换为YUV 4:4:4 - 这纯粹是每个RGB矢量上的仿射变换。只需使用适当的公式即可获得所需的YUV变体。你可能也想在这时将图像分成平面。
转换为YUV 4:2:0 - 这纯粹是一个重采样问题。您需要将U和V平面重新采样为半宽半高。 NOT 只是跳过样本(“最近邻居采样”);这将导致非常难看的锯齿。您可以简单地平均相应的2x2正方形或使用更高级的滤镜。对于下采样,无论如何,面积平均值非常接近理想值;高斯可能会给出更好的结果。
如果您不介意使用库代码,来自ffmpeg的libswscale可以为您执行这两个步骤,并且可以非常快速地完成。
最后,将小图像移动到大图像上:它是纯粹的矩形图像还是使用alpha通道?无论哪种方式,您只需要遍历您希望它出现的坐标,并为每个点输出图像。如果是矩形,则只需复制像素,而如果它有alpha通道,则需要使用它进行Alpha混合(根据alpha值在像素值之间进行插值)。
答案 1 :(得分:1)
此wikipedia article有RGB - > YUV440。
和RGB - > YUV420在this section中的同一篇文章中有描述。
我不明白:
如何制作160 * 70位图图像 移动640 * 280位图图像和 反思它的优势