• 大小: 3.37MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-29
  • 语言: 其他
  • 标签: 图像压缩  

资源简介

内有exe可执行文件,可直接运行来观看效果,本人用VS2008编写

资源截图

代码片段和文件信息


// huffman_coding.cpp 
// Huffman2015.1.12
// 作者:杜衡 电信硕3
// 输入方式:控制台输入图像路径
// 功能:对256色的灰度图像进行压缩编码

#include “stdafx.h“


#include 
#include 
#include 
#include “Windows.h“
#include “math.h“
#include 


//几个全局变量,存放读入图像的位图数据、宽、高、颜色表及每像素所占位数(比特) 
//此处定义全局变量主要为了后面的图像数据访问及图像存储作准备
unsigned char *pBmpBuf;//读入图像数据的指针
int bmpWidth;//图像的宽
int bmpHeight;//图像的高
int imgSpace;//图像所需空间
RGBQUAD *pColorTable;//颜色表指针
int biBitCount;//图像类型
char str[100];//文件名称 
int Num[300];//各灰度值出现的次数 
float Feq[300];//各灰度值出现的频率 
unsigned char *lpBuf;//指向图像像素的指针
unsigned char *m_pDib;//存放打开文件的DIB


int NodeNum; //Huffman树总节点个数
int NodeStart; //Huffman树起始节点
struct Node{ //Huffman树节点
int color; //记录叶子节点的灰度值(非叶子节点为 -1)
int lsonrson; //节点的左右儿子(若没有则为 -1)
int num; //节点的数值(编码依据)
int mark; //记录节点是否被用过(用过为1,没用过为0)
}node[600];
char CodeStr[300][300]; //记录编码值
int CodeLen[300]; //编码长度
bool ImgInf[8000000]; //图像信息
int InfLen; //图像信息长度




/***********************************************************************
* 函数名称:
* readBmp()
*
*函数参数:
*  char *bmpName -文件名字及路径
*
*返回值:
*   0为失败1为成功
*
*说明:给定一个图像文件名及其路径,读图像的位图数据、宽、高、颜色表及每像素
*      位数等数据进内存存放在相应的全局变量中
***********************************************************************/
bool readBmp(char *bmpName)  //在后边读取文件时,内部实参为readpath
{
//二进制读方式打开指定的图像文件
FILE *fp=fopen(bmpName“rb“); // rb:允许读写
if(fp==0)

printf(“未找到指定文件!\n“);
return 0;
}

//跳过位图文件头结构BITMAPFILEHEADER
fseek(fp sizeof(BITMAPFILEHEADER)0);

//定义位图信息头结构变量,读取位图信息头进内存,存放在变量head中
BITMAPINFOHEADER head;  
fread(&head sizeof(BITMAPINFOHEADER) 1fp); 

//获取图像宽、高、每像素所占位数等信息
bmpWidth = head.biWidth;
bmpHeight = head.biHeight;
biBitCount = head.biBitCount;

//定义变量,计算图像每行像素所占的字节数(必须是4的倍数)
int lineByte=(bmpWidth * biBitCount/8+3)/4*4;

//灰度图像有颜色表,且颜色表表项为256
if(biBitCount==8)
{
//申请颜色表所需要的空间,读颜色表进内存
pColorTable=new RGBQUAD[256];
fread(pColorTablesizeof(RGBQUAD)256fp);
}

//申请位图数据所需要的空间,读位图数据进内存
pBmpBuf=new unsigned char[lineByte * bmpHeight];
fread(pBmpBuf1lineByte * bmpHeightfp);

//关闭文件
fclose(fp);

return 1;
}

/***********************************************************************


保存信息

***********************************************************************/
// 函数功能:二进制转十进制
int Change2to10(int pos){
int ijtwo = 1;
j = 0;
for(i = pos + 7;i >= pos;i --){
j += two * ImgInf[i];
two *= 2;
}
return j;
}


// 函数功能:保存Huffman编码树
int saveInfo(char *writePathint lineByte){
int ijk;


FILE *fout;
fout = fopen(writePath“w“);
fprintf(fout“%d %d %d\n“NodeStartNodeNumInfLen);//输出起始节点、节点总数、图像所占空间
for(i = 0;i < NodeNum;i ++){ //输出Huffman树
fprintf(fout“%d %d %d\n“node[i].colornode[i].lsonnode[i].rson);
}

/*for(i = 0;i < InfLen;i ++){
fprintf(fout“%d“ImgInf[i]);
}
fprintf(fout“\n“);*/

fclose(fout);
return 0;
}


// 函数功能:保存文件
bool

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      44544  2015-01-14 09:43  数字图像编码作业第五题 杜衡 2014204068\huffman_coding\Debug\huffman_coding.exe

     文件     459356  2015-01-14 09:43  数字图像编码作业第五题 杜衡 2014204068\huffman_coding\Debug\huffman_coding.ilk

     文件     584704  2015-01-14 09:43  数字图像编码作业第五题 杜衡 2014204068\huffman_coding\Debug\huffman_coding.pdb

     文件      25820  2015-01-14 09:43  数字图像编码作业第五题 杜衡 2014204068\huffman_coding\huffman_coding\Debug\BuildLog.htm

     文件        663  2015-01-10 16:40  数字图像编码作业第五题 杜衡 2014204068\huffman_coding\huffman_coding\Debug\huffman_coding.exe.embed.manifest

     文件        728  2015-01-10 16:40  数字图像编码作业第五题 杜衡 2014204068\huffman_coding\huffman_coding\Debug\huffman_coding.exe.embed.manifest.res

     文件        621  2015-01-14 09:43  数字图像编码作业第五题 杜衡 2014204068\huffman_coding\huffman_coding\Debug\huffman_coding.exe.intermediate.manifest

     文件      53421  2015-01-14 09:43  数字图像编码作业第五题 杜衡 2014204068\huffman_coding\huffman_coding\Debug\huffman_coding.obj

     文件    3211264  2015-01-10 16:40  数字图像编码作业第五题 杜衡 2014204068\huffman_coding\huffman_coding\Debug\huffman_coding.pch

     文件         65  2015-01-14 09:43  数字图像编码作业第五题 杜衡 2014204068\huffman_coding\huffman_coding\Debug\mt.dep

     文件      12265  2015-01-10 16:40  数字图像编码作业第五题 杜衡 2014204068\huffman_coding\huffman_coding\Debug\stdafx.obj

     文件     478208  2015-01-14 09:43  数字图像编码作业第五题 杜衡 2014204068\huffman_coding\huffman_coding\Debug\vc90.idb

     文件     167936  2015-01-14 09:43  数字图像编码作业第五题 杜衡 2014204068\huffman_coding\huffman_coding\Debug\vc90.pdb

     文件      13776  2015-01-14 09:43  数字图像编码作业第五题 杜衡 2014204068\huffman_coding\huffman_coding\huffman_coding.cpp

     文件       4519  2015-01-10 17:07  数字图像编码作业第五题 杜衡 2014204068\huffman_coding\huffman_coding\huffman_coding.vcproj

     文件       1427  2015-01-14 09:43  数字图像编码作业第五题 杜衡 2014204068\huffman_coding\huffman_coding\huffman_coding.vcproj.USER-20130119ZL.Administrator.user

     文件       1225  2015-01-10 16:35  数字图像编码作业第五题 杜衡 2014204068\huffman_coding\huffman_coding\ReadMe.txt

     文件        219  2015-01-10 16:35  数字图像编码作业第五题 杜衡 2014204068\huffman_coding\huffman_coding\stdafx.cpp

     文件        233  2015-01-10 16:35  数字图像编码作业第五题 杜衡 2014204068\huffman_coding\huffman_coding\stdafx.h

     文件        498  2015-01-10 16:35  数字图像编码作业第五题 杜衡 2014204068\huffman_coding\huffman_coding\targetver.h

     文件   11029504  2015-01-14 09:43  数字图像编码作业第五题 杜衡 2014204068\huffman_coding\huffman_coding.ncb

     文件        908  2015-01-10 16:35  数字图像编码作业第五题 杜衡 2014204068\huffman_coding\huffman_coding.sln

    ..A..H.     13312  2015-01-14 09:43  数字图像编码作业第五题 杜衡 2014204068\huffman_coding\huffman_coding.suo

     文件       5174  2015-01-10 17:22  数字图像编码作业第五题 杜衡 2014204068\test\keyboard.bmp

     文件       5174  2015-01-10 17:19  数字图像编码作业第五题 杜衡 2014204068\test\lena.bmp

     文件       2443  2015-01-13 18:38  数字图像编码作业第五题 杜衡 2014204068\test\lena_Huffman.bhd

     文件        154  2015-01-13 18:38  数字图像编码作业第五题 杜衡 2014204068\test\lena_Huffman.txt

     文件       5174  2015-01-13 17:40  数字图像编码作业第五题 杜衡 2014204068\test\lena_Huffman_Decode.bmp

     文件      62399  2015-01-13 19:13  数字图像编码作业第五题 杜衡 2014204068\霍夫曼图像压缩编码解码程序说明.docx

     目录          0  2015-01-14 09:43  数字图像编码作业第五题 杜衡 2014204068\huffman_coding\huffman_coding\Debug

............此处省略8个文件信息

评论

共有 条评论