图像处理--行程编码
来源:互联网 发布:淘宝主图尺寸怎么修改 编辑:程序博客网 时间:2024/06/05 05:39
一、图像编码必要性
虽然现在已经把真彩图像转化为256色图片,体积已经减少到1/3,但就一个1024×768桌面的来说也有768.8kB的体积,所以要进一步把图像压缩,编码。为了能达到更快的计算速度,降低图像发送端的负担,所以采用算法简单、运算速度快的行程编码方法编码。
二、行程编码介绍
行程编码的基本思想:将一行中颜色值相同的相邻象素用一个计数值和该颜色值来代替。例如aaabccccccddeee可以表示为3a1b6c2d3e。如果一幅图象是由很多块颜色相同的大面积区域组成,那么采用行程编码的压缩效率是惊人的。然而,该算法也导致了一个致命弱点,如果图象中每两个相邻点的颜色都不同,用这种算法不但不能压缩,反而数据量增加一倍。
行程编码的可行性讨论:行程编码的压缩方法对于自然图片来说是不太可行的,因为自然图片像素点错综复杂,同色像素连续性差,如果硬要用行程编码方法来编码就适得其反,图像体积不但没减少,反而加倍。鉴于计算机桌面图,图像的色块大,同色像素点连续较多,所以行程编码对于计算机桌面图像来说是一种较好的编码方法。行程编码算法特点:有算法简单、无损压缩、运行速度快、消耗资源少等优点。
三、行程编码的实现
(1)、实现描述
我们要编码的是256色位图,而256色位图的调色板里的数据连续性很差,所以我们对调色板后面的图像数据进行编码,调色板数据不纳入编码内容。另外设最大行程为255,一个字节。
即编码前文件与编码后文件结构对比:
实现代码:
#include "windows.h"
#include <stdlib.h>
/*************************************************************
行程编码:
pData0 源数据指针
size0 源数据长度
pData1 编码后数据指针
return long 编码后数据长度
***************************************************************/
long code(BYTE* pData0,long size0,BYTE* pData1)
{
BYTE pix0,pix1;
BYTE Count=0;
BYTE* pIndex=pData1;
pix0=pData0[0];
for(long i=0;i<size0;i++)
{
Count++;
pix1=pData0[i];
if(pix1!=pix0)
{
*pIndex=Count-1;
pIndex++;
*pIndex=pix0;
pIndex++;
pix0=pix1;
Count=1;
}
if(Count==255)
{
*pIndex=Count;
pIndex++;
*pIndex=pix0;
pIndex++;
pix0=pix1;
Count=0;
}
}
*pIndex=Count-1;
pIndex++;
*pIndex=pix0;
return (1+pIndex-pData1);
}
/***************************************************************
行程解码:
pData0 源数据指针
size0 源数据长度
pData1 解码后数据指针
return long 解码后数据长度
***************************************************************/
long decode(BYTE* pData0,long size0,BYTE* pData1)
{
BYTE pix;
BYTE Count=0;
BYTE* pIndex=pData1;
for(long i=0;i<size0;i+=2)
{
Count=pData0[i];
pix=pData0[i+1];
for(BYTE j=0;j<Count;j++)
{
*pIndex=pix;
pIndex++;
}
}
return (1+pIndex-pData1);
}
编码前图像
编码后图像
二次编码后图像
体积
787,456 字节
117,342字节
33,235 字节
(本文摘自我的07毕业论文)
- 图像处理--行程编码
- 行程编码
- 行程编码与译码
- 多媒体的行程编码
- 多媒体的行程编码
- 行程编码解码.m
- 行程编码压缩算法
- 行程长度编码
- 32:行程长度编码
- 32:行程长度编码
- 行程长度编码科普
- 图像灰度化、直方图均衡化、高斯模糊、FFT2D、行程编码压缩....
- RLE行程长度编码概述
- 行程编码c语言实现
- 行程编码RLE java实现
- MATLAB中行程编码技术
- iOS 图像处理-剪裁图像
- iOS 图像处理 - 图像拼接
- ASP.NET 数据库操作类---DataSet类
- my synonyms
- 正确使用java.util.logging包
- Java三个月 - 面向对象程序设计OOP的乐趣 - 程序人生
- ASP.NET中用C#类实现Javascript的基本功能
- 图像处理--行程编码
- 数据库操作小类
- common phrases
- 读德鲁克的《卓有成效的管理者》笔记(三) ---如何发挥人的长处
- C#类实现字符串的公共操作二——字符串过滤
- 基于JDBC的数据库连接池技术研究与应用
- 解决vmware和redhat搭配时,redhat有时需要重启网卡才能联网的问题
- 解决JSP开发Web程序中的中文问题
- First Delphi Report Builder Program