rgb888转24位bmp

bmp.h:

#define u8 unsigned char
int BMP_HEAD_WIDTH[4] = { 18,19,20,21 }; //图片宽度(像素)
int BMP_HEAD_HEIGH[4] = { 22,23,24,25  }; //图片高度(像素)

u8 BMP_HEAD[54] = {
	0x42,//B
	0x4D,//M
	/*文件总字节数*/
	0x46,//2
	0x00,//3
	0x00,//4
	0x00,//5
	/*保留*/
	0x00,
	0x00,
	0x00,
	0x00,
	/*文件头+信息头大小(14+40)*/
	0x36,
	0x00,
	0x00,
	0x00,
	/*信息头大小*/
	0x28,
	0x00,
	0x00,
	0x00,
	/*宽度*/
	0x02,//18
	0x00,//19
	0x00,//20
	0x00,//21
	/*高度*/
	0x02,//22
	0x00,//23
	0x00,//24
	0x00,//25
	/*固定值*/
	0x01,
	0x00,
	/*每个像素的位数24*/
	0x18,//28
	0x00,//29
	/*压缩方式*/
	0x00,
	0x00,
	0x00,
	0x00,
	/*位图所有像素所占字节数*/
	0x00,
	0x00,
	0x00,
	0x00,
	/*水平分辨率 pex/m*/
	0x00,//38
	0x00,//39
	0x00,//40
	0x00,//41
	/*垂直分辨率 pex/m*/
	0x00,//42
	0x00,//43
	0x00,//44
	0x00,//45
	/*使用的颜色数*/
	0x00,
	0x00,
	0x00,
	0x00,
	/*重要的颜色数*/
	0x00,
	0x00,
	0x00,
	0x00
};

main.c

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include "bmp.h"
/**
*函数功能:把rgb888数据写入24位bmp中
* 参数: width,height,*RgbData
**/
/*像素点数据 从最后一行开始,从左到右*/
u8 bmp_data[2][4*3] = { 
	{ 0x00,0x00,0xff,0x00,0x6a,0xff,0x00,0x00,0x00,0x40,0x40,0x40}, //第二行
	{0x00,0x00,0x00,0x40,0x40,0x40,0x00,0x00,0xff,0x00,0x6a,0xff}   //第一行
};
void WriteRgb8882Bmp(char*filename, int heigh, int width)
{
	int i = 0,j=0;
	int BmpHeadLeng = 54;
	FILE* fp = fopen(filename, "w+");//D://Users//wzx//Desktop//
	/*将宽高转换成16进制*/
	/*修改宽高*/

	BMP_HEAD[BMP_HEAD_WIDTH[0]] = width & 0xff;
	BMP_HEAD[BMP_HEAD_WIDTH[1]] = width & 0xff00;
	BMP_HEAD[BMP_HEAD_WIDTH[2]] = width & 0xff0000;
	BMP_HEAD[BMP_HEAD_WIDTH[3]] = width & 0xff000000;

	BMP_HEAD[BMP_HEAD_HEIGH[0]] = heigh & 0xff;
	BMP_HEAD[BMP_HEAD_HEIGH[1]] = heigh & 0xff00;
	BMP_HEAD[BMP_HEAD_HEIGH[2]] = heigh & 0xff0000;
	BMP_HEAD[BMP_HEAD_HEIGH[3]] = heigh & 0xff000000;
	/*将文件头写入文件*/
	for (i = 0;i < 54;i++)
	{
		fprintf(fp,"%c",BMP_HEAD[i]);
	}
	int col_len = sizeof(bmp_data[0]); //列数一行的字节数 必须是4的倍数,每个像素点用3个字节表示
	int row_len = sizeof(bmp_data)/col_len;//行数
	/*写入图片数据*/
	for (i = 0;i < row_len;i++)
	{
		for (j = 0;j < col_len;j++)
		{
			fprintf(fp, "%c", bmp_data[i][j]);
		}
		//一行数据写完
		if (col_len % 4 != 0) //一行的像素点数如果不是4的倍数,补0
		{
			for (int ii = 0;ii < col_len % 4;ii++)
			{
				fprintf(fp, "%c", 0x00);
			}
		}
	}
	fclose(fp);
}
int main()
{
	WriteRgb8882Bmp("D://Users//wzx//Desktop//result.bmp",2,4);
}

使用paint.net打开2行4列
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BMP格式是Windows操作系统中最常见的图像文件格式之一,它采用无压缩的位图图像存储方法,可以保存不同颜色、分辨率和深度的图像。而RGB文件则是指将图像的颜色信息按照红、绿和蓝三种颜色通道进行分离保存的文件。 要将BMP格式换为RGB文件,首先需要了解BMP文件的结构。BMP文件由文件头和图像数据组成,文件头包含了文件的基本信息,而图像数据则包含了每个像素点的颜色信息。 要进行换,可以使用编程语言或图像处理软件来实现。以编程语言为例,可以按照以下步骤进行换: 1. 读取BMP文件的文件头信息,识别出图像的宽度、高度和深度等参数。 2. 根据深度信息,确定每个像素点的大小。 3. 读取图像数据,按照每个像素点的大小进行解析,获取每个像素点的颜色信息。 4. 将每个像素点的颜色信息拆分为红、绿、蓝三个通道的颜色值。 5. 将红、绿、蓝三个通道的颜色值保存为RGB文件。 通过以上步骤,就能够将BMP格式的图像换为RGB文件,其中RGB文件中的数据就是按照每个像素点的颜色信息进行分离的,可以方便地进行进一步的图像处理和分析。 需要注意的是,对于一些特殊的BMP文件,可能存在压缩或者加密的情况,这种情况下需要根据具体的情况来进行相应的处理。另外,为了保证换的准确性和稳定性,建议使用专业的图像处理软件或者图像处理库进行换操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值