1

最初の部分は、ファイルを開いてyuv1バッファーにロードすることです。次の段階は、YUV420pデータを正しく読み取ることです。私はwikiからこの式を使用します

  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(Y-16)-0.813(V-128)-0.391(U-128)

R = 1.164(Y-16)+ 1.596(V-128)

RGBを取得した後、それらをロードしてバッファに正しく戻し、ファイルを閉じます。

しかし、このエラーエラーC2064が発生しています。termは、3つの数式行で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);
4

1 に答える 1

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);

また、b、g、r 変数の型に応じて、浮動小数点の結果を整数値にキャストまたは丸める必要があります。

于 2012-07-03T08:15:11.897 に答える