1

Первая часть - открыть файл и загрузить его в буфер yuv1. Следующим этапом правильно считывать данные YUV420p я использовать эту формулу из викиyuv420p to rgb преобразование изображения

size.total = size.width * size.height; 
     y = yuv[position.y * size.width + position.x]; 
     u = yuv[(position.y/2) * (size.width/2) + (position.x/2) + size.total]; 
     v = yuv[(position.y/2) * (size.width/2) + (position.x/2) + size.total + (size.total/4)]; 

Следующим этапом является принимать значения из YUV и конвертировать в RGB, используя формулу ниже

B = 1,164 (Y - 16) + 2,018 (U - 128)

G = 1,164 (У - 16) - 0,813 (V - 128) - 0,391 (U - 128)

R = 1,164 (У - 16) + 1,596 (V - 128)

После получения RGB мы загружаем их обратно в буфер правильно и закрываем файл.

Но я получаю эту ошибку ошибки C2064: термин не оценивает функцию, принимающую 302 аргумента в трех линиях формулы.

Может кто-то помочь мне

Код ошибки

 r1 = 1.164(y1 - 16) + 1.596(v1 - 128) +  0; 
     g1 = 1.164(y1 - 16) - 0.813(v1 - 128) - 0.391(u1 - 128); 
     b1 = 1.164(y1 - 16)+   0   + 2.018(u1 - 128); 
+0

По крайней мере покажите нам строку, в которой происходит ошибка. – Henrik

+0

r1 = 1,164 (y1 - 16) + 1,596 (v1 - 128) + 0; g1 = 1,164 (y1 - 16) - 0,813 (v1 - 128) - 0,391 (u1 - 128); b1 = 1,164 (y1 - 16) + 0 + 2,018 (u1 - 128); Это ссылки, в которых происходит ошибка. Я отправил весь код. –

ответ

1

Вы просто вставить математическую формулу в код C? Это не сработает.

Вам нужно будет исправить запись в верхнем/нижнем регистре ваших переменных. И вам нужно явное умножение знак:

b = 1.164 * (y - 16) + 2.018 * (u - 128); 
g = 1.164 * (y - 16) - 0.813 * (v - 128) - 0.391 * (u - 128); 
r = 1.164 * (y - 16) + 1.596 * (v - 128); 

И в зависимости от типа от б, г и г переменных, вам нужно бросить или округлой результат с плавающей точкой в ​​целое число.

+0

Знаки умножения по-прежнему отсутствуют в вашем коде. – Codo

+0

Спасибо, что новая пара глаз делает магию :) Глупая ошибка –