-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfile_process.h
86 lines (76 loc) · 4 KB
/
file_process.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
//
// Created by 黄智忠 on 19/6/2018.
//
#ifndef SIMPLE_FILE_PROCESS_H
#define SIMPLE_FILE_PROCESS_H
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
using namespace std;
using namespace cv;
typedef unsigned short int WORD;
typedef unsigned int DWORD;
typedef int LONG;
typedef unsigned char BYTE;
/*********** *********** *********** *********** *********** *********** ***********
* definition :struct
* Description :位图文件头
*********** *********** *********** *********** *********** *********** ***********/
#pragma pack(1)/////////////////将结构体中成员按n字节对齐
typedef struct tagBITMAPFILEHEADER
{
WORD bfType;////////////////文件类型,必须为BM
DWORD bfSize;///////////////指定文件大小,以字节为单位(3-6字节,低位在前)
WORD bfReserved1;///////////文件保留字,必须为0
WORD bfReserved2;///////////文件保留字,必须为0
DWORD bfOffBits;////////////从文件头到实际位图数据的偏移字节数(11-14字节,低位在前)
}BITMAPFILEHEADER;
/*********** *********** *********** *********** *********** *********** ***********
* definition :struct
* Description :位图信息头
*********** *********** *********** *********** *********** *********** ***********/
typedef struct tagBITMAPINFOHEADER
{
DWORD biSize;///////////////本结构所占用字节数,为40。注意:实际操作中则有44,这是字节补齐的原因
LONG biWidth;///////////////位图的宽度,以像素为单位
LONG biHeight;//////////////位图的高度,以像素为单位
WORD biPlanes;//////////////目标设备的级别,必须为1
WORD biBitCount;////////////每个像素所需的位数,1(双色),4(16色),8(256色)16(高彩色),24(真彩色)或32之一
DWORD biCompression;////////位图压缩类型,0(不压缩),1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一
DWORD biSizeImage;//////////位图的大小(其中包含了为了补齐行数是4的倍数而添加的空字节),以字节为单位
LONG biXPelsPerMeter;///////位图水平分辨率,每米像素数
LONG biYPelsPerMeter;///////位图垂直分辨率,每米像素数
DWORD biClrUsed;////////////位图实际使用的颜色表中的颜色数,若该值为0,则使用颜色数为2的biBitCount次方
DWORD biClrImportant;///////位图显示过程中重要的颜色数,若该值为0,则所有的颜色都重要
}BITMAPINFOHEADER;
#pragma pack()//////////////////取消自定义字节方式
/*********** *********** *********** *********** *********** *********** ***********
* definition :struct
* Description :调色板
*********** *********** *********** *********** *********** *********** ***********/
typedef struct tagRGBQUAD
{
BYTE rgbBlue;///////////////蓝色的亮度(0-255)
BYTE rgbGreen;//////////////绿色的亮度(0-255)
BYTE rgbRed;////////////////红色的亮度(0-255)
BYTE rgbReserved;///////////保留,必须为0
}RGBQUAD;
/*********** *********** *********** *********** *********** *********** ***********
* Function Name :printInfo
* Description :输出文件信息
*********** *********** *********** *********** *********** *********** ***********/
void printInfo(BITMAPFILEHEADER fileHeader,BITMAPINFOHEADER infoHeader);
/*********** *********** *********** *********** *********** *********** ***********
* Function Name :printInfo
* Description :输出画板信息
*********** *********** *********** *********** *********** *********** ***********/
void printPalette(RGBQUAD *rgbPalette,int sizeOfPalette);
bool readBmp(char *bmpName, unsigned char*& pBmpBuf, int& bmpWidth, int& bmpHeight, RGBQUAD*& pColorTable, int& biBitCount);
bool proportion(unsigned char *bmpBuf,int width,int height);
bool saveBmp(char *bmpName,unsigned char *imgBuf,int width,
int height,int biBitCount,RGBQUAD *pColorTable);
#endif //SIMPLE_FILE_PROCESS_H