功能: 通过C程序实现图片处理,把24bit_BMP转为16bit_BMP
主要流程:
1)打开图片文件,获得文件流指针
2)读取开头54byte,获取图片头部结构体,分析图片信息
3)再获取图片的数据部分(头部结构体之后的部分)
4)通过位偏移,把每3byte的(888RGB)转为2byte(1555GRB)
5)把所有数据写到另一个空的BMP文件
#include <stdio.h>
#include <stdlib.h>#include <string.h>
#define BMP_TYPE 0x424D
#define BI_RGB 0
#define BMP1555_BYTE 2
#define BMP24_BYTE 3
#define BMP32_BYTE 4
#define CURBMP_BYTE BMP24_BYTE
#define BMP24_TO_16(B, G, R) ((B << 0)|(G << 5)|(R << 10))
typedef unsigned short WORD;
typedef unsigned int DWORD;
typedef unsigned long LONG;
#pragma pack(1)
typedef struct tagBITMAPFILEHEADER
{
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER;
#pragma pack(1)
typedef struct tagBITMAPINFOHEADER
{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;