基于哈夫曼的图片压缩
更新时间:2024-01-16 11:27:01 阅读量: 教育文库 文档下载
#pragma once
#include
struct BitmapFileHeader { WORD bmpHeader;//文件头“BM”
DWORD fileSize;//文件大小,字节为单位 WORD reservedWord1;//文件保留字1 必为0 WORD reservedWord2;//文件保留字2 必为0 DWORD offSet;//位图数据起始位置 };
struct BitmapFileInfo {
DWORD bmpInfoSize;//即本结构所占的大小 为28 即4字节 LONG bmpWidth;//位图的宽度 LONG bmpHeight;//位图的高度
WORD bmpPlanes;//目标设备的级别(必须为1)
WORD bmpBitCount;//每个像素的尾数,必须为1(双色)4(16色) 8(256色)彩)
DWORD bmpCompression;//必为0(BI_RGB未压缩) 1(BI_RLEB) 2(BI_RLE4) DWORD bmpSizeImage;//位图的大小 单位为字节 LONG bmpXpelsPerMeter;//水平分辨率 每米像素数 LONG bmpYpelsPerMeter;//垂直分辨率
DWORD bmpColorUsed;//位图显示所需颜色数
DWORD bmpColorImportant;//重要的颜色数 若为0 则都重要 };
class BMPbase {
public:
BMPbase(const char* fileName); ~BMPbase(); private:
bool fileSuccess;//判断文件是否打开成功的标志 bool fileCompression;//判断文件是否被压缩 bool bmpFileflag;//判断是否为BMP文件 bool bmpBitRight;//判断文件位数是否正确 BitmapFileHeader bmpHeader;//bmp文件头 BitmapFileInfo BmpPic;//bmp文件基本信息 BYTE* picPix;//图片数据数组
public:
bool isReadFileSuccess(); bool isBmpFile();
(真 24BitmapFileHeader getBmpHedader();//获取文件头 BitmapFileInfo getBmpInfo();//获取信息结构体 bool isBmpBitRight();//获取位图是否正确
bool isFileCompression();//获取文件是否被压缩 BYTE* getPicPix();//获取颜色数组 int pixNum; };
BMPbase.cpp
#include \#include \
BMPbase::BMPbase(const char* fileName) {
fileSuccess = true;//初始化文件为成功打开 bmpFileflag = true;//初始化文件为BMP文件 bmpBitRight = true;//初始化文件位数为正确 fileCompression = true;//初始化文件为未压缩 ifstream picReader(fileName, ios::binary); if (!picReader) {
fileSuccess = false;//文件读取失败 } else {
picReader.read((char*)&bmpHeader.bmpHeader, sizeof(WORD)); if (bmpHeader.bmpHeader != 0x4D42) {
bmpFileflag = false;//文件读取失败,类型不一致 }
else//开始读取文件信息 {
picReader.read((char*)&bmpHeader.fileSize, sizeof(DWORD));//读文件大小 picReader.read((char*)&bmpHeader.reservedWord1, sizeof(WORD));//读取保留字 picReader.read((char*)&bmpHeader.reservedWord2, sizeof(WORD));//读取保留字
/*if (bmpHeader.reservedWord1 != 0x00 || bmpHeader.reservedWord2 != 0x00)//判断文件保留字是否正确 {
fileSuccess = false;//文件读取失败 }*/
picReader.read((char*)&bmpHeader.offSet, sizeof(DWORD));//读取偏移量 picReader.read((char*)&BmpPic.bmpInfoSize, sizeof(DWORD));
/*if (BmpPic.bmpInfoSize != 0x28)//判断文件信息长度是否正确 {
fileSuccess = false;//文件读取失败 }*/
picReader.read((char*)&BmpPic.bmpWidth, sizeof(DWORD));//获取宽度 picReader.read((char*)&BmpPic.bmpHeight, sizeof(DWORD));//获取高度
picReader.read((char*)&BmpPic.bmpPlanes, sizeof(WORD));//获取目标设备的级别 必须为1
/*if (BmpPic.bmpPlanes != 0x01)//判断设备级别是否正确 {
fileSuccess = false;//文件读取失败 }*/
picReader.read((char*)&BmpPic.bmpBitCount, sizeof(WORD));//获取每像素所需位数 8位图
if (BmpPic.bmpBitCount != 8)//判断是否为8位图 {
bmpBitRight = false;//文件读取失败,非8位图 }
picReader.read((char*)&BmpPic.bmpCompression, sizeof(DWORD));//获取文件压缩 if (BmpPic.bmpCompression != 0x00)//判断是否压缩 {
fileCompression = false;//文件读取失败,已被压缩 }
picReader.read((char*)&BmpPic.bmpSizeImage, sizeof(DWORD));//获取sizeImage picReader.read((char*)&BmpPic.bmpXpelsPerMeter, sizeof(DWORD));//获取文件水平分辨率
picReader.read((char*)&BmpPic.bmpYpelsPerMeter, sizeof(DWORD));//获取文件水平分辨率
picReader.read((char*)&BmpPic.bmpColorUsed, sizeof(DWORD));//获取文件用到颜色 picReader.read((char*)&BmpPic.bmpColorImportant, sizeof(DWORD));//获取文件重要颜色
picReader.seekg(bmpHeader.offSet, ios::beg);//从文件开头开始偏移前面读出的偏移量
pixNum = BmpPic.bmpHeight*BmpPic.bmpWidth; picPix = new BYTE[pixNum];
for (int x = 0; x < pixNum; x++) {
picReader.read((char*)&picPix[x], sizeof(BYTE));//获取文件数据部分 } } } }
BMPbase::~BMPbase() {
for (int x = 0; x < BmpPic.bmpWidth; x++) {
delete[] picPix; } }
bool BMPbase::isReadFileSuccess() {
return fileSuccess; }
bool BMPbase::isBmpFile() {
return bmpFileflag; }
BitmapFileHeader BMPbase::getBmpHedader() {
return bmpHeader; }
BitmapFileInfo BMPbase::getBmpInfo() {
return BmpPic; }
bool BMPbase::isBmpBitRight() {
return bmpBitRight; }
bool BMPbase::isFileCompression() {
return fileCompression; }
BYTE* BMPbase::getPicPix() {
return picPix; }
正在阅读:
基于哈夫曼的图片压缩01-16
德夯(最终定稿)08-22
植物园游记作文300字06-30
人类历史上曾经存在过两个公认的旷世天才07-24
乱丢垃圾者通报 Microsoft Word 文档 (2)07-22
中考课外古诗阅读指导01-18
2022年一年级小学生春节作文范文八篇04-23
观杨子荣纪念馆之感受03-17
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 哈夫曼
- 压缩
- 基于
- 图片
- 2016成人危重患者营养支持疗法提供和评定指南
- 2017年中考数学二次函数压轴题汇编(2)
- 南阳童谣
- 在线考试系统毕业论文
- 实验报告格式示例
- 0906130204-廖浩伟-操作系统安全课程设计报告
- 微免试卷选择题整理
- 2012年泉州市丰泽区初中毕业学业质量检测语文试题及参考答案
- 五年级英语句型转换专项练习
- 2013年环境污染物排放量统计年报--摘自环保部官网
- 第四单元《长方体(二)》单元测试题2017春北师大版数学五年级下册小学数学试题试卷
- 电影与幸福感2019尔雅答案100分
- 中国农业银行个人电子银行交易限额标准
- 基于UML表示的数字城市GIS图形库建模及其实践 - 0000
- 智慧渔业方案(渔业水产信息化解决方案) - 图文
- 新北师大版一年级数学下册全册教案-带教学反思 - 图文
- SAP应用中常用的TCODE - 图文
- 特种设备事故报告和调查处理规定
- 13-14四年级下班主任工作计划
- 人类对外界环境的感知教案