LCD图片显示、触摸屏、音乐播放、缩放图片和播放视频

一.GEC6818开发板的LCD

1.LCD

(1)原理

LCD屏幕是由一个个像素组成的,横向像素个数和纵向像素个数是LCD的一个重要指标,称为像素分辨率,当前举例开发板的分辨率是 800X480

LCD显示从屏幕左上角的像素开始,直到右下角一帧结束

像素位数指的是存储一个像素数据所需要的空间长度,当前举例LCD的像素位数是32位(bpp)
在这里插入图片描述

(2)屏幕显示的控制

LCD的像素显示数据来自于显存,显存一般使用内存,使用一段内存空间来存储显示数据,将显存和LCD建立映射关系之后,我们往显存上写什么数据,LCD就会显示什么内容

显存在用户空间不能直接访问,需要将显存映射到用户空间之后才能访问,使用mmap函数来实现映射

LCD硬件对应的设备文件 /dev/fb0
在这里插入图片描述

2.mmap函数

mmap函数用来映射文件,将文件映射到内存,建立映射关系,修改映射的内存就会影响对应的文件

#include <sys/mman.h>
void *mmap(void *addr, size_t length, int prot, int flags,
                  int fd, off_t offset);
int munmap(void *addr, size_t length);
参数:

    addr:映射内存的首地址,给NULL表示由系统选择映射地址

    length:映射区的长度(映射长度是页的倍数)

    prot:映射区权限
    
         PROT_EXEC  Pages may be executed.

         PROT_READ  Pages may be read.

         PROT_WRITE Pages may be written.

         PROT_NONE  Pages may not be accessed.
        
    flags:映射标志

         MAP_SHARED ----- 对映射区的修改要同步到文件
        
         MAP_PRIVATE ----- 对映射区的修改不同步到文件

    fd:映射的文件描述符

    offset:映射位置相对于文件开头的偏移

成功返回映射区首地址,失败MAP_FAILED((void *)-1)

映射区使用完成之后要解除映射,使用munmap函数解除,传入映射区首地址和映射区的长度

3.LCD的显存映射

使用mmap映射显存和映射普通文件的流程一样,唯一的区别是映射的文件要改成LCD的设备文件 (/dev/fb0)

对于LCD的显示来说,往先存上写什么数据,LCD就会显示什么内容,LCD显示简化成了显存操作,也就是内存操作

4.图片的显示

图片分为位图和矢量图,位图存储的是图像的像素信息,矢量图保存的是图像的轮廓信息。

位图主要用于图像显示和存储,矢量图主要用于工程制图

(1)位图的参数

位图文件存储的图像信息,图像信息就有几个重要参数 --------- 像素分辨率 像素位数

对于一个位图文件来说,我们需要找到它的 图像数据 像素分辨率 像素位数

(2)位图格式

bmp:图像数据不压缩,直接保存

jpeg:压缩的图片

png:压缩的图片

tiff:压缩的图片

gif:动态图片

5.bmp图片格式

(1)bmp图片数据组成
在这里插入图片描述

文件头:
在这里插入图片描述
信息头:
在这里插入图片描述
图像数据:

图像数据一个像素中颜色分量的顺序如下

    24位 -------- B G R

    32位 -------- B G R A

二.触摸屏

1.概念和原理

触摸屏是一个输入设备,在Linux内核中使用输入子系统的框架来实现的,使用输入子系统实现的设备驱动对应的设备文件 /dev/event0…1…2…或/dev/input/event0…1…2…

我们触摸屏对应的设备文件是 /dev/input/event0

输入子系统上报的信息(读到的信息)都是一个个的事件(struct input_event)

在/usr/include/linux/input.h 中定义

struct input_event 
{
     struct timeval time;//时间戳
     __u16 type;//事件类型
     __u16 code;// 按键事件---键值      坐标事件---坐标类型
     __s32 value;//按键事件---按键状态  坐标事件---坐标值
};

事件类型:

  #define EV_SYN                  0x00 //同步事件
  #define EV_KEY                  0x01 //按键事件
  #define EV_REL                  0x02 //相对坐标事件
  #define EV_ABS                  0x03 //绝对坐标事件
  #define EV_MSC                  0x04
  #define EV_SW                   0x05
  #define EV_LED                  0x11
  #define EV_SND                  0x12
  #define EV_REP                  0x14
  #define EV_FF                   0x15
  #define EV_PWR                  0x16
  #define EV_FF_STATUS            0x17
  #define EV_MAX                  0x1f
  #define EV_CNT                 (EV_MAX+1)

键值:

  #define KEY_ESC                 1
  #define KEY_1                   2
  #define KEY_2                   3
  #define KEY_3                   4
  #define KEY_4                   5
  #define KEY_5                   6
  #define KEY_6                   7
  #define KEY_7                   8
  #define KEY_8                   9
  #define KEY_9                   10
  #define KEY_0                   11

  #define BTN_TOUCH               0x14a

坐标类型:

  #define ABS_X                   0x00
  #define ABS_Y                   0x01
  #define ABS_Z                   0x02

2.测试

(1)使用hexdump命令

hexdump /dev/input/event0
编号 时间戳 事件类型 坐标类型/键值 坐标值/按键状态
0000000 1dcc 7ff8 4e50 000e 0003 0000 01b1 0000
0000010 1dcc 7ff8 4e56 000e 0003 0001 013b 0000
0000020 1dcc 7ff8 4e5a 000e 0001 014a 0001 0000
0000030 1dcc 7ff8 4e5e 000e 0000 0000 0000 0000
0000040 1dcc 7ff8 1923 000f 0001 014a 0000 0000
0000050 1dcc 7ff8 1928 000f 0000 0000 0000 0000

(2)编写代码

编写输入子系统的代码需要包含 linux/input.h 头文件

三.音乐播放

6818开发板上的音频驱动,麦克风,耳机接口都已经实现,我们只需要使用。借助开源音乐播放器软件madplay来播放音乐

1.使用madplay直接用命令

madplay mp3音乐文件路径

2.使用system函数来执行音乐控制播放命令

(1)开始播放

system("madplay mp3音乐文件路径 &");

(2)停止播放

system("killall -KILL madplay &");

(3)暂停播放

system("killall -STOP madplay &");

(4)继续播放

system("killall -CONT madplay &");

四.图片缩放

线性差值算法是一种简易经典的图片缩放算法,就是按照比例去寻找所需要的像素点

假设图片原始的长和宽(像素)为a,b

缩放后的图片大小为a0,b0

那么缩放后图片上任意一像素点(x0,y0)对应原图片的像素坐标(x,y)为

x = x0*a/a0;

y = y0*b/b0;

注:图片的宽度必须是4的倍数

五.maplyer播放视频

1.安装mplayer

mplayer是一个开源的视频播放工具,可以用来播放各种格式的视频

mplayer已经编译好了,将下载好的mplayer文件传送到开发板文件系统,修改权限777,将文件移动到/usr/bin

2.使用mplayer播放视频

基本用法:

mplayer avi视频文件的路径

-quiet:不要显示推流

-zoom -x 800 -y 480:指定视频播放大小

猜你喜欢

转载自blog.csdn.net/LCHONSEONE/article/details/124017938