⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 runlength_en.h

📁 用c语言编写的无损压缩中的熵编码的编码和解码程序! 很实用的!
💻 H
字号:
/////////////////////////////////////////////
//
//    Runlength_en.h
//    文件内容:游程编码
//    
//    作    者:丁贵广
//    制作日期:2003.5.26
//    西安电子科技大学 AI Lab    
//
/////////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h>

unsigned char image[256][256];
unsigned char buf[65535];
int width=256,height=256;
/**************************************************************************
 runlength_en(FILE *ifile,FILE *ofile)
 游程编码函数
 **************************************************************************/
void runlength_en(FILE *ifile,FILE *ofile)
{
	//读图象数据
	int i,j,k,sign;
	int tmp,num;
	for(i=0;i<height;i++)
		fread(&image[i][0],sizeof(unsigned char),width,ifile);
	fclose(ifile);
	sign=0;k=0;
	for(i=0;i<height;i++)
	{
		for(j=0;j<width;j++)
		{
			if(sign==0)
			{
				tmp=image[i][j];
				sign=1;
				num=1;
			}
			else
			{
				if(tmp==image[i][j])
				{
					if(num<256) num++;
					else
					{
						buf[k]=tmp;
						buf[k+1]=num;
						k=k+2;
						tmp=image[i][j];
						sign=1;
						num=1;
					}
				}
				else
				{
					buf[k]=tmp;
					buf[k+1]=num;
					k=k+2;
					tmp=image[i][j];
					sign=1;
					num=1;
				}
			}
		}
	}
	fwrite(&width,sizeof(unsigned int),1,ofile);
	fwrite(&height,sizeof(unsigned int),1,ofile);
	fputc(256,ofile);
	fwrite(&k,sizeof(unsigned int),1,ofile);
	fwrite(buf,sizeof(unsigned char),k,ofile);
	fclose(ofile);
}
/**************************************************************************
 runlength_de(FILE *ifile,FILE *ofile)
 游程编码函数
 **************************************************************************/
void runlength_de(FILE *ifile,FILE *ofile)
{
	int length;
	int i,j,k;
	fread(&width,sizeof(int),1,ifile);
	fread(&height,sizeof(int),1,ifile);
	fgetc(ifile);
	fread(&length,sizeof(int),1,ifile);
	fread(buf,sizeof(unsigned char),length,ifile);
	fclose(ifile);
	k=0;
	for(i=0;i<height;i++)
	{
		for(j=0;j<width;j++)
		{
			if(buf[k+1]>0)
			{
				image[i][j]=buf[k];
				buf[k+1]--;
			}
			else
			{
				k=k+2;
				image[i][j]=buf[k];
				buf[k+1]--;
			}
		}
	}
	for(i=0;i<height;i++)
	{
		fwrite(&image[i][0],sizeof(unsigned char),width,ofile);
	}
	fclose(ofile);
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -