新手入门
- 积分
- 12
- 金钱
- 12
- 注册时间
- 2021-9-9
- 在线时间
- 8 小时
|
20金钱
程序功能为模拟一张QICF分辨率(176*144)的RGB565图像,随后将此图像以BMP文件格式保存在SD卡中
程序流程为----生产一个50688(176*144*2)大小的u8数组----生成bmp编码文件头----写入文件头----按从下至上,从左至右的顺序循环写入每一行----关闭文件
这是一个为了测试相机拍照功能的测试程序,之前因为不太懂FATFS系统所以那这个练手,但是问题在于如今文件操作没有什么问题,但是保存的图像PIC_1.bmp文件在电脑上居然显示不支持此格式,让我非常困惑,然而将编码程序对照例程,并未发现错误,所以想请教论坛各位大佬帮忙分析一下,共同探讨一下,帮我解决这个问题
以下我贴出编码程序
u8 bmp_encode565(char * filename)
{
UINT fnum;
FIL* f_bmp;
u16 bmpheadsize; //bmp头大小
BITMAPINFO hbmp;
volatile FRESULT res_bmp;
u8 databuf[352]={0};
/////////BMP文件头部数据结构定义///////////
bmpheadsize = sizeof(hbmp);
hbmp.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
hbmp.bmiHeader.biWidth = 176;
hbmp.bmiHeader.biHeight = 144; //bmp的高度
hbmp.bmiHeader.biPlanes = 1; //恒为1
hbmp.bmiHeader.biBitCount = 16; //bmp为16位色bmp
hbmp.bmiHeader.biCompression = BI_BITFIELDS;//每个象素的比特由指定的掩码决定。
hbmp.bmiHeader.biSizeImage = hbmp.bmiHeader.biHeight*hbmp.bmiHeader.biWidth*hbmp.bmiHeader.biBitCount/8;
hbmp.bmiHeader.biYPelsPerMeter = 0;
hbmp.bmiHeader.biXPelsPerMeter = 0;
hbmp.bmiHeader.biClrUsed = 0;
hbmp.bmiHeader.biClrImportant = 0;
//bmp数据区大小
hbmp.bmfHeader.bfType = ((u16)'M'<<8)+'B';//BM格式标志
hbmp.bmfHeader.bfSize = bmpheadsize+hbmp.bmiHeader.biSizeImage;//整个bmp的大小
hbmp.bmfHeader.bfOffBits = bmpheadsize;
hbmp.bmfHeader.bfReserved1 = 0;
hbmp.bmfHeader.bfReserved2 = 0;
hbmp.RGB_MASK[0] = 0X00F800;
hbmp.RGB_MASK[1] = 0X0007E0;
hbmp.RGB_MASK[2] = 0X00001F;
/////////BMP文件写入///////////
res_bmp = f_open(f_bmp,(char*)filename,FA_WRITE|FA_CREATE_ALWAYS);
f_close(f_bmp);/* 新建文件之后要先关闭再打开才能写入 */
res_bmp = f_open(f_bmp,(char*)filename,FA_OPEN_EXISTING | FA_WRITE);
if (res_bmp==FR_OK)
{
res_bmp = f_write(f_bmp,(u8*)&hbmp,bmpheadsize,&fnum);
for (int i = 0; i < 144; i++)
{
for (int j = 0; j < 352; j++)
{
u16 a=((352*(143-i))+j);
databuf[j]=pic[a];
}
res_bmp = f_write(f_bmp,(u8*)databuf,352,&fnum);
}
res_bmp = f_close(f_bmp);
}
return res_bmp;
}
我会常来帖子的,还请大家帮帮忙
|
|