linux使用lcd显示图片

project

#include 
#include "lcd.h"


#define BMP_PATH "/mnt/hgfs/share/004/test.bmp" //图片绝对路径

int main(void)
{
	int i;
	
	
	//LCD初始化
	Lcd_Init();	

	
	Show_bmp(BMP_PATH, 0, 0);
	
	

	//LCD撤消
	Lcd_UnInit();	
	return 0;
}
#include "lcd.h"


int lcd_fd; //文件描述符
unsigned int *mmp;


void Lcd_Init(void)
{
	//打开屏幕操作
	lcd_fd = open(LCD_PATH,  O_RDWR);
	if(lcd_fd == -1)
	{
		printf("open file failure\n");
		return ;
	}
	
	//LCD的映射
	mmp = mmap(	NULL, 					//自定义映射的起始地址,NULL,让系统自己分配起始地址
				800*480*4, 				//映射长度 800*480*4
				PROT_READ|PROT_WRITE, 	//页操作
				MAP_SHARED,				//进程权限  MAP_SHARED :进程可共享
                lcd_fd, 				//文件描述符
				0						//以起始地址开始偏移量,0
				);

}

void Lcd_UnInit(void)
{
	int ret;
	//LCD撤消
	munmap(mmp, 800*480*4);
	//关闭文件
	ret = close(lcd_fd);
	if(ret == -1)
	{
		printf("close failure\n");
		return ;
	}	
	
}

/*
const char *pathname:图片的路径
int start_x:显示的起点坐标X
int start_y:显示的起点坐标Y
*/
extern void Show_bmp(const char *pathname, int start_x, int start_y)
{
	int bmp_fd, i;
	unsigned char bmp_buff[800*480*3] = {0};
	unsigned int  lcd_buff[800*480] = {0};
	
	//打开图片
	bmp_fd = open(pathname, O_RDWR);
	if(-1 == bmp_fd)
	{
		printf("open failure\n");
		return;
	}
	//跳过54个字节头
	lseek(bmp_fd, 54, SEEK_SET);
	//读取图片的全部数据到buffer当中
	read(bmp_fd, bmp_buff, sizeof(bmp_buff));
	
	for(i=0; i<800*480; i++)
	{
		
		lcd_buff[i] = bmp_buff[3*i+0] | bmp_buff[3*i+1]<<8 | bmp_buff[3*i+2]<<16;
	}
    
	int tmpbuf[800*480];
	int x,y;
	for(x=0;x<800;x++)
		for(y=0;y<480;y++)	
		{
			tmpbuf[(800*(479-y)+x)]=lcd_buff[(800*y+x)];
			
			}
//       for(x=0;x<480;x++)
//	        for(y=0;y<800;y++)	
//	        {
//		        tmpbuf[(800*(479-y)+x)]=lcd_buff[(800*y+x)];
//	        }
            
	//显示在LCD当中
	for(i=0; i<800*480; i++)
	{
		*(mmp + i) =  tmpbuf[i];
	}
	
	
	close(bmp_fd);
	
}



你可能感兴趣的:(linux使用lcd显示图片)