STM32F4开发板从SD卡内读出BMP图像转码(解码)并显示到LCD屏

具体代码及解析如下:


BMP的解码:

void show_bmp(char *fname,float a,float b)							//显示BMP图像
{
    
    
	FIL fp;
	FRESULT ret;
	char SD_Readbuf[640] = {
    
    0};
	unsigned int wsbyte = 0;

	char *filename;
	filename = strtok(fname,"\0");
	int x;
	int i;
	unsigned char picH,picL; 

	ret = f_open(&fp,filename,FA_READ);								//打开BMP图像文件
	if(FR_OK != ret)
	{
    
    
		printf("打开文件失败!ret:[%d]\r\n",ret);
		while(1);
	}
	f_lseek(&fp,56);												//跳过头信息字节
	
	if(fabs(b) > fabs(a) && fabs(b) > 2)							//Roll值大于Pitch值(控制前后)
	{
    
    
		if(b > 0)													//Roll值大于0,低头
		{
    
    
			LCD_Scan_Dir(U2D_L2R);									//改变显示方向
		}
		
		if(b < 0)													//Roll值小于0,抬头
		{
    
    
			LCD_Scan_Dir(U2D_R2L);									//改变显示方向
		}
	}	
	
	else															//不属于以上的情况,就是平衡状态
	{
    
    
		LCD_Scan_Dir(U2D_L2R);										//默认显示方向
	}	
	
		

	LCD_Set_Window(0,0,320,240);									//窗口设置
	LCD->LCD_REG = 0x2c;											
	for(i=0;i<240;i++)
	{
    
    
		ret = f_read(&fp,SD_Readbuf,640,&wsbyte);					//读出BMP图像文件数据
		if(FR_OK != ret)
		{
    
    
			printf("读文件失败!ret:[%d]\r\n",ret);
			while(1);
		}
		
		for(x=0;x<320*2;x++)										//一个像素点两个字节
		{
    
    
			picL=((SD_Readbuf[x])) ; 								//像素点第一个字节,数据低位					
			x++;
			picH=((SD_Readbuf[x])) ;								//像素点第二个字节,数据高位	
			LCD->LCD_RAM = ((picH<<8)|picL);    					//低位在前,高位在后,传送到LCD显示
		}
	}
}

BMP的编码:https://blog.csdn.net/weixin_43793181/article/details/109520220
基于STM32F4开发板的简易照相机完整工程代码:https://download.csdn.net/download/weixin_43793181/13083116

猜你喜欢

转载自blog.csdn.net/weixin_43793181/article/details/109520302