将数据写以BMP格式写入SD卡中

发布时间:2024年01月22日

FatFs - Generic FAT Filesystem Module (elm-chan.org)?

memcpy函数的作用:

void *memcpy(void *destin, void *source, unsigned n);

以source指向的地址为起点,将连续的n个字节数据,复制到以destin指向的地址为起点的内存中。
函数有三个参数,第一个是目标地址,第二个是源地址,第三个是数据长度。

	memcpy(0x3000000,0x2000000,1920*1080*4);
int savebmpimg(BITMAPFILEHEADER fileh,BITMAPINFOHEADER infoh,char * filename,u8 *imgsrc){
	FATFS fatfs;	//file system object
	TCHAR *path="0:/";
	FRESULT res;
	FIL fil;
	UINT numbytewrite;
	res=f_mount(&fatfs,path,0);
	if(res==!FR_OK){
		return XST_FAILURE;
	}
	res=f_open(&fil,(TCHAR *)filename,FA_WRITE|FA_CREATE_ALWAYS);
	if(res==!FR_OK){
		return XST_FAILURE;
	}
	res=f_lseek(&fil,0);
	if(res==!FR_OK){
		return XST_FAILURE;
	}
	res=f_write(&fil,&fileh,sizeof(BITMAPFILEHEADER),&numbytewrite);
	if(res==!FR_OK){
		return XST_FAILURE;
	}
	res=f_write(&fil,&infoh,sizeof(BITMAPINFOHEADER),&numbytewrite);
	if(res==!FR_OK){
		return XST_FAILURE;
	}
	res=f_write(&fil,imgsrc,1920*1080*3+256,&numbytewrite);
	if(res==!FR_OK){
		return XST_FAILURE;
	}
	res=f_sync(&fil);
	if(res==!FR_OK){
		return XST_FAILURE;
	}
	res=f_close(&fil);
	if(res==!FR_OK){
		return XST_FAILURE;
	}
}

一下代码的作用是:原本数据是{FF,R,G,B},最高位的ff是不需要的,BMP格式不需要最高位的ff,通过这个函数将高8位的ff舍弃掉。?

int ffrgbtorgb(u8* ffrgb ,u8 *rgb){
	int i;
	for(i=0;i<1920*1080*4;i++){
		if(i%4!=3){
			*rgb = *ffrgb;
			rgb++;
			ffrgb++;
		}
		else{
			ffrgb++;
		}
	}
}

以下代码是将结构体赋值,主要是为了BMP数据head

    BITMAPFILEHEADER filh;
    BITMAPINFOHEADER infh;

    filh.bfOffBits = 54;
    filh.bfReserved1 =0;
    filh.bfReserved2 =0;
    filh.bfSize = 54 + 1920*1080*3;
    filh.bfType = 0x4d42;

    infh.biBitCount = 24;
    infh.biClrImportant = 0;
    infh.biClrUsed=0;
    infh.biCompression =0;
    infh.biHeight=1080;
    infh.biPlanes=1;
    infh.biSize=40;
    infh.biSizeImage=1920*1080*3;
    infh.biWidth=1920;
    infh.biXPelsPerMeter=0;
    infh.biYPelsPerMeter=0;

文章来源:https://blog.csdn.net/weixin_60010850/article/details/135757449
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。