c语言获取sd卡图片,SD卡Fatfs文件系统BMP文件读取显示

#include "TFCard_BMP.h"

/*==================================================================

用到的变量及宏定义

==================================================================*/

BMP_HEAD  bmp;   //图片文件头

BMP_POINT point;

/*==================================================================

* Function    : RGB888ToRGB565

* Description    : 把24位图变成16位图

* Input Para    : unsigned char r , unsigned char g , unsigned char b

* Output Para    : void

* Return Value: 颜色值

==================================================================*/

u32 RGB888ToRGB565(unsigned char r , unsigned char g , unsigned char b)

{

return (u32) (r & 0xF8) << 8 | (g & 0xFC) << 3 | (b & 0xF8) >> 3;

}

/*==================================================================

* Function    : DrawPixel

* Description    : 画点函数,在TFT的某一点上画一个颜色点

* Input Para    : unsigned int x , unsigned int y , int Color  ===》 x坐标,y坐标,颜色值

* Output Para    : void

* Return Value: void

==================================================================*/

void DrawPixel(unsigned int x , unsigned int y , int Color)

{

LCD_SetGramPoint(x,y);

LCD_WR_Data(Color);

}

/*==================================================================

* Function    : Show_BMP

* Description    : 显示BMP格式的文件,分为图片和图标,图片尺寸是240*320是完全显示,图标只显示内容,其他白色的部分维持原来的颜色

* Input Para    : unsigned char type , unsigned int point_x , unsigned int point_y , char *path

===》   显示的类型:PCITURE图片,ICON图标 ,x轴起始点 ,y轴起始点 ,图片在SD卡里的路径

* Output Para    : void

* Return Value: void

==================================================================*/

void Show_BMP( unsigned char type , unsigned int point_x , unsigned int point_y , char *path )

{

FATFS fs;            // 磁盘挂载点

FIL  fil;           // 文件打开点

FRESULT res;        // 返回值类型结构体

//unsigned char buffer[4096*4];  // file copy buffer

unsigned char buffer[50000];     // 这个数组和堆栈空间大小直接相关

unsigned int  br;                // File R/W count

unsigned long tx,ty,r_data,g_data,b_data;

disk_initialize(0);                                                  // 初始化磁盘

res = f_mount(0,&fs);                                              // 挂载设备

while(1)

{

res = f_open(&fil , path , FA_OPEN_EXISTING | FA_READ);          // 读取图标路径

res = f_read(&fil , &bmp , sizeof(bmp),&br);                   // 读取文件

if((bmp.pic_head[0]=='B')&&(bmp.pic_head[1]=='M'))              // 判断是不是BMP文件

{

res = f_lseek(&fil , ((bmp.pic_data_address_h<<16)|bmp.pic_data_address_l)); // 采用了Windows的BMP格式,BMP原点在左下角

for(ty=0;ty

{

res = f_read(&fil , buffer , (bmp.pic_w_l)*3 , &br) ;

for(tx=0;tx

{

r_data = *(tx*3 +2+buffer);

g_data = *(tx*3 +1+buffer);

b_data = *(tx*3 +0+buffer);

if(tx<240)

{

point.x = tx;

point.y = bmp.pic_h_l -1 -ty;

point.r = r_data;

point.g = g_data;

point.b = b_data;

if(type == PICTURE)             // 如果显示的是图片的话,白色部分照常显示

{

DrawPixel(point.x + point_x,point.y + point_y,RGB888ToRGB565(point.r,point.g,point.b));

}

else if(type == ICON)         // 如果显示的是图标的话,白色部分不显示

{                             // 以下代码根据  DrawPixel() 函数更改增加

LCD_SetGramPoint( point.x+point_x , point.y+point_y );     // 设定x轴,y轴的坐标

if(RGB888ToRGB565(point.r,point.g,point.b) == 0xFFFF)       // 判断是不是白色部分

{

LCD_WR_Data( ili9320_BGR2RGB(LCD_RD_data()) );            // 如果是白色就读取当前颜色值并显示

}

else

{

LCD_WR_Data( RGB888ToRGB565(point.r,point.g,point.b) );    // 如果不是白色就显示ICON的颜色

}

}

}

}

}

f_close(&fil);                                              // 关闭文件

f_mount(0,NULL);                                          // 卸载设备

break;                                                      // 跳出while(1)

}    // End of if((bmp.pic_head....

}       // End of while(1)....

}            // End of void Show_BMP(....

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值