今有C++函数:BOOL clip255(LONG v)
{
 if(v<0) v=0;
 else if(v>255) v=255;
 return (BYTE)v;
}
 void  YUY2_RGB2(BYTE *YUY2buff,BYTE *RGBbuff,DWORD dwSize)
{

 BYTE *orgRGBbuff = RGBbuff;
 for(DWORD count=0;count<dwSize;count+=4)
 {
  BYTE Y0 = *YUY2buff;
  BYTE U = *(++YUY2buff);
  BYTE Y1 = *(++YUY2buff);
  BYTE V = *(++YUY2buff);
  ++YUY2buff;
  LONG Y,C,D,E;
  BYTE R,G,B;
  
  Y = Y0;
  C = Y-16;
  D = U-128;
  E = V-128;
  R = clip255(( 298 * C           + 409 * E + 128) >> 8);
  G = clip255(( 298 * C - 100 * D - 208 * E + 128) >> 8);
  B = clip255(( 298 * C + 516 * D           + 128) >> 8);
  *(RGBbuff) =   B;           
  *(++RGBbuff) = G;   
  *(++RGBbuff) = R;         
  Y = Y1;
  C = Y-16;
  D = U-128;
  E = V-128;
  R = clip255(( 298 * C           + 409 * E + 128) >> 8);
  G = clip255(( 298 * C - 100 * D - 208 * E + 128) >> 8);
  B = clip255(( 298 * C + 516 * D           + 128) >> 8);
  *(++RGBbuff) =   B;           
  *(++RGBbuff) = G;   
  *(++RGBbuff) = R;         
  ++RGBbuff;
  
 }
}
转成C#该怎么转??
我自己转的如下,似乎不对,请达人帮忙转下
  private static void YUV_RGB(byte[] YUY2buff, ref byte[] RGBbuff, Int32 dwSize)
            {                byte[] tempBuf = RGBbuff;
                MessageBox.Show(RGBbuff.Length.ToString() + "RGB " + YUY2buff.Length.ToString() + "YUY");
                for (int i = 0; i < dwSize; i += 4)
                {
                    float Y0 = YUY2buff[i];
                    float U = YUY2buff[i + 1];
                    float Y1 = YUY2buff[i + 2];
                    float V = YUY2buff[i + 3];
                    float R, G, B;                    R = (Y0 + 1.14f * V);
                    G = (Y0 - 0.39f * U - 0.58f * V);
                    B = (Y0 + 2.03f * U);                    if (R < 0) R = 0;
                    if (R > 255) R = 255;
                    if (G < 0) R = 0;
                    if (G > 255) R = 255;
                    if (B < 0) R = 0;
                    if (B > 255) R = 255;                    RGBbuff[i] = (byte)R;
                    RGBbuff[i + 1] = (byte)G;
                    RGBbuff[i + 2] = (byte)B;
                    R = (Y1 + 1.14f * V);
                    G = (Y1 - 0.39f * U - 0.58f * V);
                    B = (Y1 + 2.03f * U);                    if (R < 0) R = 0;
                    if (R > 255) R = 255;
                    if (G < 0) R = 0;
                    if (G > 255) R = 255;
                    if (B < 0) R = 0;
                    if (B > 255) R = 255;                    RGBbuff[i + 1] = (byte)R;
                    RGBbuff[i + 2] = (byte)G;
                    RGBbuff[i + 3] = (byte)B;
                }
            }

解决方案 »

  1.   

    你这样好像不是翻译啊,有些代码都没看到像这样的
    298 * C           + 409 * E + 128,你代码里面有吗其实C++和c#的差不多。
      

  2.   

    private static void YUV_RGB(byte[] YUY2buff, ref byte[] RGBbuff, Int32 dwSize)
    byte[] YUY2buff 这个参数在C#中不好弄,可以考虑使用BitmapData类,把图像锁在内存中
    然后翻译就容易多了。。
      

  3.   

    c++里的:        
          *(++RGBbuff) = G;   
       
    对应是C#的  RGBbuff[i+1] = G吗? 
      

  4.   

    copy 就行了
    BYTE 改为byte
    指针改为数组
      

  5.   

    这函数不是简单的copy啊,是将YUY格式数据转成RGB数据。怎么能COPY呢?