YUV2Jpg(in_Y,in_U,in_V,0x400,0x1b0,75,0x420,pData,&dwSize);

参数说明:in_Y:输入的420的Y分量;in_U:输入的420的U分量,in_V:输入420的V分量;width:表示图像的宽;height表示图像的高;quality表示量化因子,n_Stride表示Yuv的跨度,即Yuv的宽,因为该函数只能处理16的整数倍,所以width为0x400;pOut表示转化后的数据;pnOutSize为转化后的jpeg文件的大小;

int YUV2Jpg(PBYTE in_Y,PBYTE in_U,PBYTE in_V,int width,int height,int quality,int nStride,PBYTE pOut,DWORD *pnOutSize)  //

{

PBYTE pYBuf,pUBuf,pVBuf;

int nYLen = nStride  * height;

int nUVLen = nStride  * height / 4;

int  nDataLen;

JPEGINFO JpgInfo;

ZeroMemory(&JpgInfo,sizeof(JPEGINFO));

JpgInfo.bytenew = 0;

JpgInfo.bytepos = 7;

pYBuf = (PBYTE)malloc(nYLen);                      //获取Y的值

memcpy(pYBuf,in_Y,nYLen);

pUBuf = (PBYTE)malloc(nYLen);

pVBuf = (PBYTE)malloc(nYLen);

ProcessUV(pUBuf,in_U,width,height,nStride);        //获取U的值

ProcessUV(pVBuf,in_V,width,height,nStride);        //获取V

//GetDataFromSource(pYBuf,pUBuf,pVBuf,in_Y,in_U,in_V,width);

DivBuff(pYBuf,width,height,nStride,DCTSIZE,DCTSIZE);

DivBuff(pUBuf,width,height,nStride,DCTSIZE,DCTSIZE);

DivBuff(pVBuf,width,height,nStride,DCTSIZE,DCTSIZE);

quality = QualityScaling(quality);

SetQuantTable(std_Y_QT,JpgInfo.YQT, quality); //设置Y量化表

SetQuantTable(std_UV_QT,JpgInfo.UVQT,quality); //设置UV量化表

InitQTForAANDCT(&JpgInfo);                       //初始化AA&N需要的量化表

JpgInfo.pVLITAB=JpgInfo.VLI_TAB + 2048;       //设置VLI_TAB的别名

BuildVLITable(&JpgInfo);                         //计算VLI表

nDataLen = 0;

//写入各段

nDataLen = WriteSOI(pOut,nDataLen);

nDataLen = WriteAPP0(pOut,nDataLen);

nDataLen = WriteDQT(&JpgInfo,pOut,nDataLen);

nDataLen = WriteSOF(pOut,nDataLen,width,height);

nDataLen = WriteDHT(pOut,nDataLen);

nDataLen = WriteSOS(pOut,nDataLen);

//计算Y/UV信号的交直分量的huffman表,这里使用标准的huffman表,并不是计算得出,缺点是文件略长,但是速度快

BuildSTDHuffTab(STD_DC_Y_NRCODES,STD_DC_Y_VALUES,JpgInfo.STD_DC_Y_HT);

BuildSTDHuffTab(STD_AC_Y_NRCODES,STD_AC_Y_VALUES,JpgInfo.STD_AC_Y_HT);

BuildSTDHuffTab(STD_DC_UV_NRCODES,STD_DC_UV_VALUES,JpgInfo.STD_DC_UV_HT);

BuildSTDHuffTab(STD_AC_UV_NRCODES,STD_AC_UV_VALUES,JpgInfo.STD_AC_UV_HT);

//处理单元数据

nDataLen = ProcessData(&JpgInfo,pYBuf,pUBuf,pVBuf,width,height,pOut,nDataLen);

nDataLen = WriteEOI(pOut,nDataLen);

free(pYBuf);

free(pUBuf);

free(pVBuf);

*pnOutSize = nDataLen;

return 0;

}

具体代码参考YUV2Jpg程序;

nv21转jpg c语言,Yuv420转Jpeg(C语言实现)相关推荐

  1. R 语言怎么保存工作目录到当前路径_【R语言基础】01.R语言软件环境搭建及常用操作...

    一.R语言简介 R语言是专业的统计分析软件,来自著名数据科学网站(http://www.kdnuggets.com/)发起的一个2019年统计分析和数据挖掘软件使用情况的调查结果: 表明R语言是该领域 ...

  2. c语言 字母 八进制表示'/1011',C语言C语言第一课:C语言概述为什么学习C语言怎样学习C语言.DOC...

    [摘要]C语言 第一课: C语言概述 为什么学习C语言 怎样学习C语言 参考资料 ----------------------------------------------------------- ...

  3. bool类型返回值_Python 到底是强类型语言,还是弱类型语言?

    推荐三个网站 1.Python进阶知识: http://python.iswbm.com  2.Python魔法技巧: http://magic.iswbm.com 3.PyCharm 手册: htt ...

  4. 《C Primer Plus(第6版)中文版》一第1章 初识C语言1.1 C语言的起源

    本节书摘来自异步社区<C Primer Plus(第6版)中文版>一书中的第1章,第1.1节,作者 傅道坤,更多章节内容可以访问云栖社区"异步社区"公众号查看. 第1章 ...

  5. 浅谈python语言_浅谈Python语言基础知识点!

    一.Python 语言的简述 Python语言是一种解释型.面向对象的编程语言,是一种开源语言. Python属于动态类定义语言,也是一种强调类型语言. 二.Python 语言的特点 1.简单.高级 ...

  6. c语言 hello world代码_C语言基础

    首先,还是从hello world开始. #include <stdio.h> int main(void) { printf("Hello Worldn"); ret ...

  7. Swift2.0语言教程之Swift2.0语言中的标准函数

    Swift2.0语言教程之Swift2.0语言中的标准函数 Swift2.0中的标准函数 函数除了可以根据参数列表的有无分为无参函数和有参函数,还可以从定义角度分为用户自定义函数和标准函数两种.以上的 ...

  8. C语言实现易语言变量框,c语言实现简单的易语言

    大家熟知的易语言底层其实就是c语言来实现的,c语言的32个关键字加上一些常用的其他,使用#define这种宏定义来实现简单的汉语替换 1.下面就先打开VisualStudio,在头文件目录下新建一个 ...

  9. 51 时间片系统 纯c语言,51单片C语言学习.doc

    51单片C语言学习 51单片机C语言学习第三课 [ 作者:明浩????转贴自:电子制作实验室????点击数:1067????更新时间:2004-10-2????文章录入:admin ]减小字体 增大字 ...

  10. python程序设计语言是什么类型的语言-Python 是弱类型的语言 强类型和弱类型的语言区别...

    Python 是弱类型的语言 在强类型的编程语言中,定义变量时要指明变量的类型,而且赋值的数据也必须是相同类型的,C语言.C++.Java 是强类型语言的代表. 下面我们以 C++ 为例来演示强类型语 ...

最新文章

  1. java中处理字符编码(网页与数据库)(转)
  2. C#学习基本概念之匿名方法及Lambda表达式
  3. 单据打印_Excel多功能进销存套表,自动库存单据,查询打印一键操作
  4. 面向区块链的高效物化视图维护和可信查询论文学习
  5. 考试君 - 基于.NET 5语言的Furion框架开发在线考试系统
  6. Java反射机制涉及的类常见方法使用总结
  7. zuul网关,springsecurity认证中心 和 Swagger2 整合遇到的问题
  8. 登录图片滑动验证实现
  9. Java常用的框架有哪些?
  10. HTML插入Flash的全兼容完美解决方案-SWFObject
  11. 谷歌html编辑器代码,一行代码让谷歌浏览器变成在线编辑器
  12. 固态硬盘基础知识,了解一下
  13. 【巴什博弈 抢夺资源】
  14. Win10系统把桌面变成苹果iOS界面的小技巧
  15. 2011年养成的一个工作习惯
  16. JSP使用Struts1提交中文表单时乱码,字符编码问题
  17. 查询国际学术会议的信息
  18. 输入5个学生某门课程的成绩(用一维数组表示),分别用函数实现下列功能:
  19. 再探HEVC——理解不同类型的I帧
  20. 以爱情规律为例,浅谈三段式描述状态机

热门文章

  1. Linux中用yum安装MySQL方法
  2. Perl Print Win32 Console Windows 控制台 print Unicode 问题
  3. UIView常见方法
  4. 详解 ASP.NET并行,异步,多线程
  5. 进化计算-遗传算法之史上最全选择策略
  6. 两个应用程序之间的通信
  7. Html与JS正则表达式测试代码
  8. 【LeetCode】【字符串】题号:*12. 整数转罗马数字
  9. 【Tensorflow】tensorboard小结
  10. geopandas读取shp