- 浏览: 1088670 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (453)
- Struts2 (30)
- Spring (14)
- iBATIS (6)
- Hibernate (13)
- JVM (5)
- JSON (10)
- Ajax (5)
- Flex (1)
- JavaScript (25)
- PowerDesigner (4)
- 项目管理 (7)
- 数据库 (29)
- 生活 (18)
- 软件应用 (21)
- 无线技术 (2)
- Linux (39)
- TOP开发学习 (2)
- JAVA工具小TIPS (2)
- Java通用 (52)
- XML (3)
- 软件测试 (29)
- Maven (10)
- Jquery (1)
- 正则表达式 (3)
- 应用服务器 (15)
- Android (5)
- linux 和windowx 下 tomcat 设置JVM (8)
- 应用服务器 连接池 (4)
- Linux 后台输出中文乱码 (1)
- Hadoop (28)
- python (2)
- Kafka (7)
- Storm (5)
- Elasticsearch (7)
- fddd (1)
最新评论
-
kafodaote:
Kafka分布式消息系统实战(与JavaScalaHadoop ...
分布式消息系统Kafka初步 -
小灯笼:
LoadRunner性能测试实战课程网盘地址:http://p ...
LoadRunner性能测试应用(八) -
成大大的:
Kafka分布式消息系统实 ...
分布式消息系统Kafka初步 -
hulalayaha2:
Loadrunner性能测试视频教程下载学习:http://p ...
LoadRunner性能测试应用(八) -
993042835:
搞好 谢谢
org.hibernate.exception.ConstraintViolationException: could not delete:
JPEG文件数据结构以及将位图保存为JPG的代码 一、简述 JPEG是一个压缩标准,又可分为标准JPEG、渐进式JPEG及JPEG2000三种: ①标准JPEG:以24位颜色存储单个光栅图像,是与平台无关的格式,支持最高级别的压缩,不过,这种压缩是有损耗的。此类型图片在网页下载时只能由上而下依序显示图片,直到图片资料全部下载完毕,才能看到全貌。 ②渐进式JPEG:渐进式JPG为标准JPG的改良格式,支持交错,可以在网页下载时,先呈现出图片的粗略外观后,再慢慢地呈现出完整的内容,渐进式JPG的文件比标准JPG的文件要来得小。 ③JPEG2000:新一代的影像压缩法,压缩品质更好,其压缩率比标准JPEG高约30%左右,同时支持有损和无损压缩。一个极其重要的特征在于它能实现渐进传输,即先传输图像的轮廓,然后逐步传输数据,让图像由朦胧到清晰显示。 以一幅24位彩色图像为例,JPEG的压缩分为四个步骤: ①颜色转换:在将彩色图像进行压缩之前,必须先对颜色模式进行数据转换。转换完成之后还需要进行数据采样。 ②DCT 变换:是将图像信号在频率域上进行变换,分离出高频和低频信息的处理过程,然后再对图像的高频部分(即图像细节)进行压缩。首先以象素为单位将图像划分为多个8×8的矩阵,然后对每一个矩阵作DCT 变换。把8×8的象素矩阵变成8×8的频率系数矩阵(所谓频率就是颜色改变的速度),频率系数都是浮点数。 ③量化:由于下面第四步编码过程中使用的码本都是整数,因此要对频率系数进行量化,将之转换为整数。数据量化后,矩阵中的数据都是近似值,和原始图像数据之间有了差异,这一差异是造成图像压缩后失真的主要原因。这一过程中,质量因子的选取至为重要。值选得大,可以大幅度提高压缩比,但是图像质量就比较差,质量因子越小图像重建质量越好,但是压缩比越低。 ④编码:编码是基于统计特性的方法。 四个步骤都完成后的JPEG文件,其基本数据结构为两大类型:“段”和经过压缩编码的图像数据。 二、数据结构 1.段的一般结构如下表所示: 表1:段的一般结构 ----------------------------------------------------------------- 名称 字节数 数据 说明 ----------------------------------------------------------------- 段标识 1 FF 每个新段的开始标识 段类型 1 类型编码(称作“标记码”) 段长度 2 包括段内容和段长度本身,不包括段标识和段类型 段内容 ≤65533字节 ----------------------------------------------------------------- 说明: ①JPG 文件中所有关于宽度高度长度间隔这一类数据,凡是>1字节的,均采用Motorola格式,即:高位在前,低位在后。 ②有些段没有长度描述也没有内容,只有段标识和段类型。文件头和文件尾均属于这种段。 ③段与段之间无论有多少FF都是合法的,这些FF称为“填充字节”,必须被忽略掉。 2.段类型有30种,但只有10种是必须被所有程序识别的,其它的类型都可以忽略。所以下面只列出这10种类型。 表2:段类型 --------------------------------------- 名称 标记码 说明 --------------------------------------- SOI D8 文件头 EOI D9 文件尾 SOF0 C0 帧开始(标准 JPEG) SOF1 C1 同上 DHT C4 定义 Huffman 表(霍夫曼表) SOS DA 扫描行开始 DQT DB 定义量化表 DRI DD 定义重新开始间隔 APP0 E0 定义交换格式和图像识别信息 COM FE 注释 ----------------------------------------------------------- 说明:有的文章也将DNL段(标记码=DC,定义扫描行数)列为必须段。 3.以下按一般JPEG文件的段排列顺序详细介绍各种段的结构: 表3:SOI(文件头) ----------------- 名称 字节数 值 ----------------- 段标识 1 FF 段类型 1 D8 ----------------- 说明:这两个字节构成了JPEG文件头。 表4:APP0(图像识别信息) -------------------------------------------------------------------------- 名称 字节数 值 说明 -------------------------------------------------------------------------- 段标识 1 FF 段类型 1 E0 段长度 2 0010 如果有RGB缩略图就=16+3n (以下为段内容) 交换格式 5 4A46494600 “JFIF”的ASCII码 主版本号 1 次版本号 1 密度单位 1 0=无单位;1=点数/英寸;2=点数/厘米 X像素密度 2 水平方向的密度 Y像素密度 2 垂直方向的密度 缩略图X像素 1 缩略图水平像素数目 缩略图Y像素 1 缩略图垂直像素数目 (如果“缩略图X像素”和“缩略图Y像素”的值均>0,那么才有下面的数据) RGB缩略图 3×n n=缩略图像素总数=缩略图X像素×缩略图Y像素 -------------------------------------------------------------------------- 说明: ①JFIF是JPEG File Interchange Format的缩写,即JPEG文件交换格式,另外还有TIFF等格式,很少用 ②“如果有RGB缩略图就=16+3n”是什么意思呢?比如说“缩略图X像素”和“缩略图Y像素”的值均为48,就表示有一个48×48像素的缩略图(n=48×48),缩略图是24位真彩位图,用3个字节来表示一个像素,所以共占用3n个字节。但大多数JPG文件都没有这个“鸡肋”缩略图。 表5:COM(注释) -------------------------------------------------------------------------- 名称 字节数 值 说明 -------------------------------------------------------------------------- 段标识 1 FF 段类型 1 FE 段长度 2 其值=注释字符的字节数+2 段内容 注释字符 -------------------------------------------------------------------------- 说明:有的JPEG文件没有这个段。 |
第1楼
|
发表评论
-
java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
2013-05-10 16:10 817C:\Program Files (x86)\MyEc ... -
读取word pdf中的文字 用第三方组件 pdfbox 和 poi
2013-03-20 23:51 1002读取word pdf中的文字 用第三方组件 pdfbox 和 ... -
非常好使的FileUtil 类
2013-03-09 12:45 1001package com.zqk.util; imp ... -
eclipse 3.4.1 导入项目后 Target runtime Apache Tomcat v5.0 is not defi...
2012-05-29 09:27 1800下载最新版本eclipse3.4.1后,导入以前的项目,报 ... -
MyEclipse 6.5 序列号生成器
2011-06-10 09:47 1664import java.awt.event.ActionEve ... -
字节序 整形与字节数组转换
2010-12-15 13:43 2340Big Endian and Little Endian ... -
JPEG文件数据结构以及将位图保存为JPG的代码 转2
2010-12-02 13:31 2847三、实例分析 用系统自带的画图程序画一个32×24的红色方块 ... -
Nginx+resin调优文档
2010-11-18 17:02 2299http://blog.liuts.com/post/204/ ... -
分析 Tomcat startup.bat 启动脚本
2010-11-03 14:53 3219分析 Tomcat startup.bat 启 ... -
Tomcat配置优化 转
2010-11-03 14:51 10661.精简Tomcat和配置文件1.1 .删除不需要的管理应用和 ... -
URLConnection 读取字节流
2010-10-27 13:15 32572008-11-08 山寨Wget实现又惹事了 h ... -
字节到整形的转换
2010-10-27 12:47 1418public byte[] intToByte(int i) ... -
Gif 文件格式分析
2010-10-27 11:45 1057GIF文档ˉˉˉˉˉˉ 1.概述~~~~~~~~ ... -
JPG文件格式解码图片高度和宽度的分析
2010-10-27 10:34 984413. 简单说一下 JPG 文件的解码 ---------- ... -
CSS制作多种链接样式
2010-10-15 11:54 1115多种链接样式制作方法 ... -
虚拟主机上给一个网卡设置多个IP地址
2010-10-13 17:22 1879配置虚拟主机时有一种方式是在一块网卡上绑定多个IP,操作如下: ... -
linux下一个网卡配置多个IP
2010-10-13 17:21 958文本控制台下面有netconfig,还有ifconfig工具, ... -
[转载]linux中sar的详细使用
2010-10-13 17:06 880在使用UNIX操作系统的过程中,我们常常 ... -
Linux中sar命令
2010-10-13 17:05 988Linux中sar命令 sar这东 ... -
Resin 3 pro高并发,响应性与稳定性方案(转)
2010-10-13 12:59 3600Resin 3 pro高并发,响应性与稳定性方案(转) ...
相关推荐
这个过程涉及到读取BMP文件的像素数据,执行上述的JPEG压缩步骤,然后按照JPEG数据结构将编码后的数据写入文件。 总结来说,JPEG是一种高效但有损的图像压缩格式,通过颜色转换、DCT、量化和编码等步骤实现压缩,其...
【JPEG文件格式详解】 JPEG(Joint Photographic Experts ...理解JPEG文件的数据结构和压缩原理对于处理和优化JPEG图像至关重要,无论是开发图像处理软件还是进行图像压缩算法的研究,这些基础知识都是必不可少的。
首先,创建一个`CImage`对象,然后使用OpenCV的`imwrite`将`Mat`保存到临时文件,再读取到`CImage`,最后将`CImage`转换为`CBitmap`: ```cpp CImage image; cv::imwrite("temp.jpg", matImage); // 将Mat写入...
在某些场景下,例如网络传输或存储空间有限的情况下,将位图文件转换为JPEG格式是很有必要的。本文将详细介绍如何实现这一转换过程,并探讨其中涉及的关键技术和步骤。 首先,我们需要理解位图文件的结构。位图文件...
在图像处理领域,JPEG、JPEG(也写作JPG)和BMP是三种常见的位图文件格式,每种格式都有其特定的应用场景和编码方式。本文将深入探讨如何使用C++在Visual Studio 2013环境下,从JPEG图像转换为BMP图像,涉及的主要...
2. **数据解码**:读取BMP图像的像素数据,由于BMP通常是RGB格式,你需要将这些像素数据解码为可以输入到JPEG编码器的格式。JpegLib通常期望YCbCr颜色空间的数据,所以可能需要进行颜色空间转换。 3. **创建JPEG编...
`jpg2bmp.c`源代码中,首先会包含相关的库文件,比如`stdio.h`用于文件操作,`jpeglib.h`用于处理JPEG数据。然后,定义处理函数,如`read_jpg()`用于读取JPEG数据,`write_bmp()`用于创建并写入BMP文件。 在`read_...
BMP格式是一种位图文件格式,其数据结构相对简单,包含图像宽度、高度、颜色深度和实际像素数据。在C语言中,我们可以直接操作这些数据来读取和写入BMP文件。转换过程首先需要读取BMP文件的头部信息,解析出图像的...
9. **JPG文件数据结构**:JPEG(Joint Photographic Experts Group)是一种常见的有损压缩图像格式。VB6代码可以读取JPEG文件的头部信息,获取图像的宽度和高度,这对于显示和处理图像非常有用。 10. **BMP文件数据...
在编码过程中,图像被分割成8x8的块,每个块进行DCT,然后量化以减少数据量,最后通过霍夫曼编码或算术编码进行熵编码,形成最终的JPG文件。 在这个源代码工程中,开发者可能还考虑了色彩空间的转换,因为BMP通常...
2. **解码JPEG数据**:JPEG数据是经过JPEG压缩算法压缩的,需要通过库函数(如`jpeg_start_decompress`和`jpeg_read_scanlines`)解码,还原为RGB像素数组。 3. **组织BMP文件结构**:BMP文件格式的结构与JPEG不同...
标题“BMP文件转换为JPG文件的源代码”提示我们,这是一个关于如何使用VC++编程语言将BMP图像转换为JPG格式的源代码示例。VC++是Microsoft开发的一个集成开发环境,用于编写基于Windows操作系统的应用程序,包括...
标题中的“Jpeg_Decompress.rar”是一个压缩文件,其中包含了一个名为“Jpeg_Decompress.c”的C源代码文件,这个源代码是用于处理JPEG图像格式与BMP图像格式转换的。JPEG(Joint Photographic Experts Group)是一种...
2. **解析JPEG数据**:使用MFC中的CImage类或其他第三方库,如FreeImage,来解析JPEG文件,提取图像数据。这一步包括了解码JPEG的压缩数据,并将其转化为RGB或者其他颜色空间的像素数组。 3. **生成PRN指令**:创建...
8. **写入JPEG数据**:编码后的JPEG数据被返回到`AVPacket`,使用`av_interleaved_write_frame`将其写入输出文件。 9. **关闭文件和清理**:最后,关闭输入和输出文件,释放所有分配的资源。 在`rgb2bmp.cpp`文件...
2. **解压缩JPEG数据**:JPEG是压缩格式,我们需要将其解压缩为原始的RGB像素数据。这个过程通常涉及反量化和IDCT(逆离散余弦变换)。 3. **创建BMP头信息**:BMP文件开头有一个包含图像大小、位深度、偏移量等...
2. **解码JPEG数据**:库会自动对JPEG数据进行解码,将其从压缩的YCbCr色彩空间转换回RGB色彩空间。 3. **创建BMP文件头**:BMP文件格式有一套固定的文件结构,包括文件头、位图信息头以及像素数据。你需要创建符合...
BMP(Bitmap)是微软操作系统中的位图图像格式,它通常保存未经压缩的像素数据,因此文件体积较大。JPG(JPEG)则是一种广泛使用的有损压缩图像格式,适合存储照片或色彩丰富的图像,其压缩算法能够显著减小文件大小...
在给定的“BMP转JPG的vc源代码”中,我们可以深入理解如何在C++环境下,利用Visual C++(简称VC)开发工具将位图(BMP)文件转换为JPEG(JPG)格式的文件。BMP和JPG是两种常见的图像格式,各有特点:BMP是无损的,...
5. **写入JPG文件**:将编码后的数据按照JPG文件格式的规范组织起来,写入新的JPG文件。JPG文件的头部包含一些元数据,比如图像尺寸、颜色空间、质量设置等。 在提供的`Bmptojpg`源代码中,这些步骤应该被实现为...