NV21是YUV格式的,比例是411。Y对应每个像素,这个好办。每个U、V对应4个像素,这个怎么复制?试着改了代码,内容出来了,颜色基本都错了。

  网上搜索了半天,都是缩放方面的。也不知道有没有测试过?能不能跑?结果对不对?

  反复搜索了几次,终于找到了一个剪切的代码,是JAVA的,而且写法跟吾差别很大。可是没有别的参考,有这个也很好了。于是自己研究了代码,发现原理、流程是一样的(那是肯定的)。有一个步骤代码有些差异,做了修改,直接崩溃。仔细看了,对照自己代码,再修改,这次有不少的画面正确,也有错误(自己的代码,之前也出现过类似情况)。

  这是怎么回事呢?同样的代码,怎么有的图片对,有的不对?吾使出以前用过的办法,将每个图片的剪切区域打印出来,进行分析。果然发现了规律:相对于源图片的TOP、LEFT必须都是偶数,图片就正确。那就好说了,咱玩这个多熟练啊。这里把正确的代码开放出来,希望对于为此苦恼的朋友有帮助。


int clipNv21ToNv21(const char* pNv21Source,  const int nWidth, const int nHeight,char* pNv21Dest,  const int nClipLeft, const int nClipTop, const int nClipWidth, const int nClipHeight)
{const char* pNv21Source0 = pNv21Source;int i = 0;//关键二之一。//取整。估计不同平台要求取整范围有差异。//这样计算的结果,有可能差一个像素。宽高最好对应调整。int clipLeft = (int)(nClipLeft+1)  / 2 * 2;int clipTop  = (int)(nClipTop +1)  / 2 * 2;//移动到指定位置pNv21Source0 += clipTop * nWidth + clipLeft;//复制Yfor (i=0; i<nClipHeight; i++){memcpy(pNv21Dest, pNv21Source0, nClipWidth);pNv21Source0 += nWidth;pNv21Dest    += nClipWidth;}//复制U/VpNv21Source0  = pNv21Source + nWidth*nHeight;pNv21Source0 += (clipTop * nWidth/2 + clipLeft);//关键二之二:for (i=0; i<nClipHeight/2; i++){memcpy(pNv21Dest, pNv21Source0, nClipWidth);pNv21Source0 += nWidth;pNv21Dest    += nClipWidth;}return 0;
}

剪裁NV21任意一部分的代码相关推荐

  1. ASP.NET获取任意网页HTML代码

    利用.NET的 WebClient类 和 WebRequest类,我们可以很容易地得到给定URL地址的源代码.主要代码如下: GetPage.aspx: 程序代码 <%@ Page Langua ...

  2. JQuery插件让图片旋转任意角度且代码极其简单 - 摘自网友

    JQuery插件让图片旋转任意角度且代码极其简单 2012-04-01 09:57:03     我来说两句       收藏    我要投稿 引入下方的jquery.rotate.js文件,然后通过 ...

  3. 基于STM32任意键薄膜键盘代码

    基于STM32任意键薄膜键盘代码   对于大多数人来说都写过51的按键扫描,但是对于32来说端口配置比较麻烦,对于按键扫描 *要配置相应的IO口模式,每种模式的特性是不一样的,可以通过按键的读写操作, ...

  4. VMware Mac版本漏洞可任意执行恶意代码

    日前安全研究人员发现了一个存在于虚拟化软件VMware Mac版本Fusion中的严重安全漏洞,该漏洞可以通过Windows虚拟机在Mac主机上执行恶意代码,VMware已经发布了Fusion 2.0 ...

  5. vue 全局函数的 定义与任意调用 (代码篇)

    文章目录 vue 全局函数的 定义与任意调用 方法一: 首先: 之后: 最后: 打印结果 · 截图: 方法二:[推荐] 代码:注意事项: vue 全局函数的 定义与任意调用 方法一: 首先: 随意新建 ...

  6. 后门权限维持php,DoubleAgent技术:任意进程下代码注入与权限维持

    概述 本文披露一种全新的0day技术,用于代码注入和权限维持. 影响范围 Windows的所有版本(windows xp到windows 10) 所有windows架构(x86和x64) Window ...

  7. JQuery插件让图片旋转任意角度且代码极其简单

    引入下方的jquery.rotate.js文件,然后通过$("选择器").rotate(角度);可以旋转任意角度, 例如$("#rotate-image").r ...

  8. cubemx stm32 串口终端的实现与使用 (可以由用户自定义各种终端指令任意) 驱动代码

    简言 我之前学linux的时候,觉得linux的命令很酷,最近又有写代码的热情,于是手撸了一个串口终端. 初次使用 介绍特性 像终端一样使用 输入niubi后,键入回车,输出自己写的回调函数中的内容. ...

  9. keil5如何设置可在一行任意位置输入代码或注释

    光标只能在一行最后一个字符后面,要想移到后面去,只能按Tab或打空格. 不移到后面倒也无伤大雅,但对于强迫症患者来讲,我就是想把注释对齐,那应该怎么设置呢? 然后按OK键保存设置,然后就可以随心所欲地 ...

  10. 无需剪切即可压缩视频中的任意一部分,压缩完毕再剪切

    使用小丸工具箱来完成.如果不了解小丸工具箱的基础操作或需要下载小丸工具箱,可以参看我的博文"极限压缩----压缩至原视频的五分之一": https://blog.csdn.net/ ...

最新文章

  1. python的用途实例-python 星号(*)的多种用途
  2. 【转载】ceph作为OpenStack的后端存储解决方案
  3. 学计算机用华硕电脑,请问华硕笔记本电脑什么型号比较好用,就商务办公?
  4. dump java崩溃自动 不生成_GitHub 自动生成 .gitignore,只想写代码不重要的事情别烦我...
  5. HTTP的同源策略与跨域资源共享(CORS)机制
  6. Android中Service的启动方式及Activity与Service的通信方式
  7. 阿里云服务器安全设置
  8. 人月神话阅读笔记 03
  9. intellij IDEA--- 报inspects a maven model for resolution problems
  10. HashSet存储自定义对象保证元素唯一性图解原理及代码优化
  11. 八个角最多可以把平面分成多少部分?_为什么越来越多的空间无主灯了?
  12. Class类和Object类及用法(二)
  13. Why Open vSwitch?
  14. asp.net Viewstate 优化
  15. 金属激光切割机行业调研报告 - 市场现状分析与发展前景预测
  16. html非封闭标签,自封闭的html标签
  17. vue项目开发之v-for列表渲染的坑
  18. 编程珠玑:位图法排序
  19. php表单附件数据回填,从表单发送文件附件使用phpMailer和PHP
  20. H3C官网-inode客户端下载

热门文章

  1. protobuf生成java类
  2. Linux 用top命令查看CPU和内存使用情况
  3. linux环境ubuntu: pushd: not found
  4. 傻瓜式操作的三个网络赚零花钱的小项目
  5. Xen虚拟机加入Puppet环境如何解决时间同步问题
  6. Using #region Directive With JavaScript Files in Visual Studio 【转载】
  7. 使用C#代码实现增加用户帐号
  8. iOS 如何把图片资源打包成bundle文件及遇到的坑(详解)
  9. C#——WebApi 接口参数传参详解
  10. MySQL Err126错误[Err] 126 - Incorrect key file for table '.\device\table_name.MYI'; try to repair it