文档章节

Jpeg解码小结(一)

t
 tigerBin
发布于 2017/07/06 10:11
字数 568
阅读 29
收藏 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
粉丝 1
博文 65
码字总数 17440
作品 0
武汉
程序员
私信 提问
几种图片格式的简介

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

南瓜宝宝
2016/05/30
43
0
iOS 处理图片的一些小 Tip

https://blog.ibireme.com/2015/11/02/iosimagetips/ 如何把 GIF 动图保存到相册? iOS 的相册是支持保存 GIF 和 APNG 动图的,只是不能直接播放。用 [ALAssetsLibrary writeImageDataToSav...

壹峰
2018/10/15
0
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大会上,英伟达开源了数据增...

深度学习
2018/06/25
0
0
全面掌握移动端主流图片格式的特点、性能、调优等

1、引言 图片通常是移动端应用流量耗费最多的部分,并且占据着重要的视觉空间。以大家最常用的即时通讯IM应用为例,应用中存在大量的图片数据往来(比如图片消息、用户相册、用户头像等等)。...

首席大胸器
2018/07/23
206
0

没有更多内容

加载失败,请刷新页面

加载更多

vue 对对象的属性进行修改时,不能渲染页面 vue.$set()

我在vue里的方法里给一个对象添加某个属性时,我console.log出来的是已经更改的object ,但是页面始终没有变化 原因如下: **受现代 JavaScript 的限制 (而且 Object.observe 也已经被废弃),...

Js_Mei
今天
2
0
开始看《Java学习笔记》

虽然书买了很久,但一直没看。这其中也写过一些Java程序,但都是基于IDE的帮助和对C#的理解来写的,感觉不踏实。 林信良的书写得蛮好的,能够帮助打好基础,看得出作者是比较用心的。 第1章概...

max佩恩
昨天
12
0
Redux 三大原则

1.单一数据源 在传统的MVC架构中,我们可以根据需要创建无数个Model,而Model之间可以互相监听、触发事件甚至循环或嵌套触发事件,这些在Redux中都是不被允许的。 因为在Redux的思想里,一个...

wenxingjun
昨天
8
0
跟我学Spring Cloud(Finchley版)-12-微服务容错三板斧

至此,我们已实现服务发现、负载均衡,同时,使用Feign也实现了良好的远程调用——我们的代码是可读、可维护的。理论上,我们现在已经能构建一个不错的分布式应用了,但微服务之间是通过网络...

周立_ITMuch
昨天
5
0
XML

学习目标  能够说出XML的作用  能够编写XML文档声明  能够编写符合语法的XML  能够通过DTD约束编写XML文档  能够通过Schema约束编写XML文档  能够通过Dom4j解析XML文档 第1章 xm...

stars永恒
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部