图片处理(一)之BMP格式24bit转16bit

本文介绍如何使用C语言编写程序,将24位色彩的BMP图片转换为16位色彩的BMP图片。通过读取文件头、解析图像信息、进行颜色位移操作,将RGB格式数据转化为1555GRB格式,并将转换后数据写入新的BMP文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

功能: 通过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;     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值