2016-06-21 9 views
1

Я хочу поменять немного U и V в формате YUV, от NV12Как поменять битную U с битом V в формате YUV

YYYYYYYY UVUV // each letter presents a bit 

к NV21

YYYYYYYY VUVU 

Я оставляю Y планарные в одиночку, и обрабатывать плоские U и V функцией ниже

uchar swap(uchar in) { 
    uchar out = ((in >> 1) & 0x55) | ((in << 1) & 0xaa); 
    return out; 
} 

Но я не могу получить желаемый результат, цвет выходного изображения еще не Corre кт.

Как правильно поменять планку U и V?

+0

У вас есть только два бита для каждого канала цветности? – onemasse

+0

NV21 обычно означает, что у вас есть 1 байт U и 1 байт V для каждых 4 байтов яркости, так что это означает, что вы хотите поменять каждый ** байт **, а не бит. – onemasse

+0

Вы правы, мне нужно поменять байты, а не бит. – alijandro

ответ

0

Обнаружили проблему. УФ следует манипулировать в байтовом формате, а не бит.

byte[] yuv = // ... 
    final int length = yuv.length; 
    for (int i1 = 0; i1 < length; i1 += 2) { 
     if (i1 >= width * height) { 
      byte tmp = yuv[i1]; 
      yuv[i1] = yuv[i1+1]; 
      yuv[i1+1] = tmp; 
     } 
    }