我正在研究Android的YuvImage.java代码,http://androidxref.com/4.2.2_r1/xref/frameworks/base/graphics/java/android/graphics/YuvImage.java#199:
为什么YUY2的步幅是宽度* 2,但NV21的步幅是宽度?
以下是代码:
199 private int[] calculateStrides(int width, int format) {
200 int[] strides = null;
201 if (format == ImageFormat.NV21) {
202 strides = new int[] {width, width};
203 return strides;
204 }
205
206 if (format == ImageFormat.YUY2) {
207 strides = new int[] {width * 2};
208 return strides;
209 }
210
211 return strides;
212 }
答案 0 :(得分:1)
NV21格式有两个平面,一个用于亮度,另一个用于颜色值。第一个的步幅是 width (在数组的第一个元素中找到)和第二个平面的 width (在数组的第二个元素中找到)。所以它的宽度加上宽度。
在YUY2格式中,亮度和颜色信息是交错的,步幅(单个像素行的数据长度)是宽度的两倍(存储在唯一的元素中)生成的数组)。