文档章节

Jpeg解码小结(一)

t
 tigerBin
发布于 2017/07/06 10:11
字数 568
阅读 26
收藏 0

Source:https://github.com/lzb-cc/JpegCodecs

数据结构:

	class Matrix
	{
	public:
		Matrix(){}
		void Create(int _rows, int _cols, int _channal) // 供外部调用的接口
		{
		    rows = _rows;
		    cols = _cols;
		    channal = _channal;
		    data = new uint8_t[_rows * _cols * _channal];
		}

		int rows;      // 图像高度
		int cols;      // 图像宽度
		int channal;   // 通道数(固定为 3, 即RGB颜色)
		uint8_t *data; // 图像数据
	};

 Matrix用于保存图像基本信息,包含图像的数据,图像的高度与宽度

解码时作为参数输入到JpegDecoder

 

JpegDecoder在构建一个对象时需要把文件路径作为参数输入,在构造函数中打开并读取文件数据到缓冲区stream 中,读取完毕后关闭文件

stream Jpg文件数据缓冲区
endOfDecoder 如果从 stream 中读取到的数据是 0xFFD9 ,表示需要解码的数据已经全部解码完成,此时解码工作全部完成
curIndex 用于指示当前从 stream 中读取的数据的位置
readCount 用于指示当前从 stream 中读取的一个字节已经有多少位 被解码了
quantY 从stream中读取Y分量的量化表
quantCbCr CbCr共用一张量化表
m_width 从stream读取图像的宽度信息
m_height 从stream读取图像的高度信息
yBlk 用于暂存从数据流中解码的四个Y分量数据块
cbBlk 用于暂存从数据流中解码的一个Cb分量数据块
crBlk 用于暂存从数据流中解码的一个Cr分量数据块
yBuf 16 x 16 的数据块(四个yBlk)
cbBuf 16 x 16 的数据块(由cbBlk反采样后形成)
crBuf 16 x 16 的数据块(由crBlk反采样后形成)
yDC,cbDC,crDC DC采用差分编码
DC,AC 四张哈夫曼表,用于解码用,从 DHT_Segment中读取,或从stream中读取

 

	class JpegDecoder
	{
	public:
		JpegDecoder(const char *fileName);
		~JpegDecoder();

		void Decoder(Matrix &mat);
	protected:
        // ......

	private:
		uint8_t       *stream;      //Jpeg文件数据流

		bool           endOfDecoder; // 数据流结束标记
		int	       curIndex;     // 解码到当前数据位
		uint8_t        readCount;    // 已经解码的当前字节的位数

		uint8_t        quantY[64];       // Y 分量量化表
		uint8_t        quantCbCr[64];    // CbCr 分量量化表

		int            m_width;          // 图像宽度
		int            m_height;         // 图像高度

		int            yBlk[4][64];
		int            cbBlk[64];
		int            crBlk[64];

		int            yBuf[256], cbBuf[256], crBuf[256];

		int            yDC, cbDC, crDC;

		/* huffman table */
		tinyStl::tinyMap DC[2], AC[2];
	};

 

© 著作权归作者所有

共有 人打赏支持
t
粉丝 0
博文 65
码字总数 17440
作品 0
武汉
程序员
应用如何适配www5168hscom.Android P153.888.033.00HEIF图片格式

应用如何适配www5168hscom.Android P153.888.033.00HEIF图片格式 谷歌公布,Android P 版本支持HEIF格式图片。HEIF 称为www5168hscom.Android P153.888.033.00HEIF图片格式。相比于 JPEG 等目...

橙子君77
08/02
0
0
几种图片格式的简介

JPEG 是目前最常见的图片格式,它诞生于 1992 年,是一个很古老的格式。它只支持有损压缩,其压缩算法可以精确控制压缩比,以图像质量换得存储空间。由于它太过常见,以至于许多移动设备的 ...

南瓜宝宝
2016/05/30
43
0
NIOS2随笔——JPEG解码与VGA显示

1. 系统概述 本设计采用NIOS2 32位处理器,通过SPI接口将SD/TF卡中的JPEG图片数据读取到内存中,SD/TF卡的文件系统为FAT32,NIOS2软件实现JPEG解码后,启动framereader和Clocked Video Outpu...

shugenyin
2017/01/08
0
0
英伟达开源数据增强和数据解码库,解决计算机视觉性能瓶颈

     新智元编译   来源:NVIDIA   编辑:肖琴   【新智元导读】在CVPR 2018大会上,英伟达开源了数据增强库DALI和数据解码库nvJPEG。   在CVPR 2018大会上,英伟达开源了数据增...

深度学习
06/25
0
0
数据压缩实验五 JPEG原理分析及JPEG解码器的调试

一、实验原理 1、JPEG图像压缩标准基本介绍 JPEG 是Joint Photographic Experts Group(联合图像专家小组)的缩写,是第一个国际图像压缩标准。JPEG图像压缩算法能够在提供良好的压缩性能的同...

zgyggy
2017/05/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

5、前后端分离跨域问题

在以往的开发中,前后端分离也不是像现在这么热门,所谓的前端工程师也只不过是写好静态页面由Java工程师或者php工程师嵌入到页面中进行开发,这或许加重了这些工程师的工作量,而且在样式调...

永远的Chester
18分钟前
0
0
全志T3 Linux显示驱动分析

1、总体架构 全志T3处理器的显示框架是基于标准Linux的帧缓冲架构,其结构如图 1.1所示。显示控制器DE的驱动架构如图 1.2所示,包括屏蔽差异的显示管理抽象层,以及显示图层驱动、显示设备驱...

pnsam301
26分钟前
0
0
【HAVENT原创】VUE2 经验问题汇总

新建一个 Vue 实例可以有下列两种方式: 1. new 一个实例 var app= new Vue({ el:'#todo-app', // 挂载元素 data:{ // 在.vue组件中data是一个函数,要写成data () {}这种方式 i...

HAVENT
29分钟前
0
0
IO基础知识

读文件,可以使用内置的open(file,mode); with 语句自动close; 查看当前目录的绝对路径:os.path.abspath('.'); 创建目录:os.mkdir(path); 删除目录:os.rmdir(path); 拼接路径推荐使用:o...

年轻的中年大叔
32分钟前
0
0
BATJ等大厂最全经典面试题分享

金九银十,又到了面试求职高峰期,最近有很多网友都在求大厂面试题。正好我之前电脑里面有这方面的整理,于是就发上来分享给大家。 这些题目是网友去百度、蚂蚁金服、小米、乐视、美团、58、...

老道士
34分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部