文档章节

Jpeg解码小结(一)

t
 tigerBin
发布于 2017/07/06 10:11
字数 568
阅读 28
收藏 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
武汉
程序员
私信 提问
几种图片格式的简介

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

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

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

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

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

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

zgyggy
2017/05/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java.util.Concurrent.Exchanger源码

类图 源码: package java.util.concurrent;import java.util.concurrent.atomic.AtomicInteger;import java.util.concurrent.atomic.AtomicReference;import java.util.concurrent......

狼王黄师傅
12分钟前
3
0
Kubernetes里的secret最基本的用法

Secret解决了密码、token、密钥等敏感数据的配置问题,使用Secret可以避免把这些敏感数据以明文的形式暴露到镜像或者Pod Spec中。 Secret可以以Volume或者环境变量的方式使用。 使用如下命令...

JerryWang_SAP
昨天
4
0
2018-11-20学习笔记

1. python数据类型: 给变量赋值什么样的值,变量就是什么样的类型 给变量赋值整数,变量就是整数类型 给变量赋值字符串,变量就是字符串类型 123 和“123”一样吗? 在python中 单引号 与双...

laoba
昨天
1
0
使用 React 和 Vue 创建相同的应用,他们有什么差异?

在工作中应用 Vue 之后,我对它有了相当深刻的理解。 不过,俗话说「外国的月亮比较圆」,我好奇「外国的」 React 是怎么样的。 我阅读了 React 文档并观看了一些教程视频,虽然它们很棒,但...

阿K1225
昨天
4
0
2天闭门培训|以太坊智能合约从入门到实战(北京)

2天培训 16个课时 探寻技术原理,精通以太坊智能合约开发 以太坊智能合约是现在应用的最广泛的区块链应用开发方式,HiBlock区块链社区针对以太坊智能合约的学习特别推出2天闭门研修班,通过2...

HiBlock
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部