Chinaunix首页 | 论坛 | 博客
  • 博客访问: 492743
  • 博文数量: 133
  • 博客积分: 1235
  • 博客等级: 少尉
  • 技术积分: 1201
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-08 19:59
文章分类

全部博文(133)

文章存档

2023年(12)

2022年(3)

2018年(2)

2017年(4)

2016年(4)

2015年(42)

2014年(1)

2013年(12)

2012年(16)

2011年(36)

2010年(1)

分类: C/C++

2022-12-19 16:45:34


点击(此处)折叠或打开

  1. yuv数据裁剪。
  2. int crop_yuv420_area(unsigned char *pInBuf, unsigned int width, unsigned int height, unsigned char *pOutBuf, int new_x, int new_y, int new_width, int new_height)
  3. {
  4.  if(NULL == pInBuf || 0 == width || 0 == height)
  5.  return -1;


  6.  int length = new_width* new_height* 3 / 2;


  7.  memset(pOutBuf , 0, length);


  8.  unsigned char *pUBuf = pOutBuf + new_width * new_height;
  9.  unsigned char *pVBuf = pOutBuf +new_width * new_height * 5 / 4;
  10.  int x = 0,y = 0;
  11.  for(x = 0; x < new_width; x++)
  12.  {
  13.  for (y = 0; y < new_height; y++) //每个循环写一列
  14.  {
  15.  *(pOutBuf + y * new_width + x) = *(pInBuf + (x + new_x) + width * (y + new_y)); //cope Y
  16.  if (1 == (x + new_x)%2 && 1 == (y + new_y)%2)
  17.  {
  18.  long pix = width * height + (width>>1) * ((y + new_y)>>1) + (((x + new_x))>>1);
  19.  *(pUBuf + (new_width/2)*(y/2) + x/2) = *(pInBuf + pix); //cope U


  20.  pix += width * height / 4;
  21.  *(pVBuf + (new_width/2)*(y/2) + x/2) = *(pInBuf + pix); //cope V
  22.  }
  23.  }
  24.  }
  25.  return 0;
  26. }
转成黑白图像,然后,把黑色或白色部份填充其它颜色

点击(此处)折叠或打开

  1. int amplify3(unsigned char* p)
  2. {
  3.     unsigned char v = *p;
  4.     if(v > 128)
  5.     {
  6.         *p = 0;

  7.     }
  8.     else
  9.     {
  10.         *p = 255;
  11.     }
  12.     return *p;

  13. }


点击(此处)折叠或打开

  1. int read_write_one_frame(char* buff,int framelen,FILE* in,FILE* out)
  2. {
  3.     int n = 0,i,j;
  4.     char* p = NULL;

  5.     memset(buff + framelen*2/3 , 128, framelen / 3);
  6.     p = buff;
  7.     char* pcb = buff + framelen*2/3;
  8.     char* pcr = buff + framelen*2/3 + framelen / 6;
  9.    // for(i = 0; i < framelen*2/3; i++)
  10.     for(i = 0; i < height;i++)
  11.     {
  12.         for(j =0; j < width;j++)
  13.         {
  14.             n = amplify3(&p[i*width + j]);
  15.             if(n)
  16.             {
  17.                 p[i*width + j] = 128;//太亮了就会出现黄白色
  18.                 if(( i%2==1)&&(j%2==1))
  19.                 {
  20.                     long pix = (width >>1)*(i>>1)+(j>>1);
  21.                     pcb[pix] = 200;
  22.                     pcr[pix] = 200;
  23.                     //pcb[pix] = 64;
  24.                     //pcr[pix] = 64;
  25.                     pcb[pix] = 200;
  26.                     pcr[pix] = 64;

  27.                 }
  28.             }
  29.         }
  30.     }

  31.     p = buff;
  32.     n = 0;
  33.     int flen = framelen;
  34.     while(flen)
  35.     {
  36.         n = fwrite(p, sizeof(char), flen, out);
  37.         if(n > 0)
  38.         {
  39.             p += n;
  40.             flen -= n;
  41.         }
  42.         else
  43.             printf("fwrite err,%s\n",strerror(errno));
  44.     }
  45.     
  46.         
  47. }



阅读(549) | 评论(0) | 转发(0) |
0

上一篇:原始套接字魔力(上)

下一篇:没有了

给主人留下些什么吧!~~