mmap 内存映射

内存映射

内存映射的作用是把硬件设备的地址,映射到应用层的内存空间,这样用户就可以跨越系统层访问linux的硬件设备。

NAME
       mmap, munmap - map or unmap    files or devices into memory
                      映射   解除映射  文件  或 设备     到   内存                       
SYNOPSIS
       #include <sys/mman.h>

       void *mmap(void *addr,  //内存首地址,NULL 系统自动选择 
               size_t length,  //映射空间的大小,必须大于0
                    int prot,  //👉 PROT_READ | PROT_WRITE
                   int flags,  // MAP_SHARED 其他进程可见     MAP_PRIVATE  其他进程不可见
                      int fd,  // 文件描述符 
                off_t offset); // 偏移量 ,默认为  0 即可 
        
          返回值: 成功   映射地址,void *万能指针,用于后续用户强制转换类型! 
                 失败    MAP_FAILED        
                                      
prot操作权限:
PROT_EXEC  可执行

PROT_READ  可读

PROT_WRITE 可写

PROT_NONE  没有权限                
     
⭐映射LCD设备 
void *mmap(NULL,800*480*4,PROT_READ | PROT_WRITE,MAP_SHARED ,lcd_fd,0)      
                                   
                                                                                                                                                       
//解除映射                     
int munmap(void *addr, size_t length);
addr:映射地址 
length:映射内存的大小 

 计算机常用的图片格式

JPG(JPEG)、PNG和BMP是常见的图像文件格式,它们各有特点和适用场景: JPG(JPEG)

压缩方式:JPEG使用有损压缩,这意味着在压缩过程中会丢失一些图像数据,尤其是当压缩比率较高时。

适用场景:由于有损压缩,JPEG文件通常比PNG和BMP文件小,适合网络传输和存储空间有限的情况。它非常适合照片和复杂图像,因为这些图像的微小失真通常人眼难以察觉。

颜色深度:JPEG支持最高为24位的颜色深度。

透明度:JPEG不支持透明背景。

PNG(Portable Network Graphics) 压缩方式:PNG使用无损压缩,它可以在不损失任何图像数据的情况下压缩图像。

适用场景:PNG非常适合网页设计、图标和其他需要高保真度图像的场合。它的文件大小通常比JPEG大,但比BMP小。 颜色深度:PNG支持最高达48位的真彩色,并且支持灰度图像、索引颜色图像。

透明度:PNG支持透明背景和半透明效果,这是它的一大优势。

BMP(Bitmap) 压缩方式:BMP通常不使用压缩,它直接存储每个像素的颜色信息,因此文件大小通常很大。

适用场景:BMP格式因其简单和直接性在某些特定场合(如Windows系统中的图标)被使用,但由于文件体积大,不适合网络传输。

颜色深度:BMP支持多种颜色深度,包括24位和32位真彩色。

透明度:标准的BMP格式不支持透明度,但Windows位图可以包含alpha通道来支持透明度。

总结来说,选择哪种格式取决于图像的使用场景和对图像质量的要求。如果需要小文件体积且可以接受一定的质量损失,JPEG是不错的选择;如果需要高保真度和透明度支持,PNG是更好的选择;而BMP由于文件

BMP 图片格式

bmp文件头结构体和bmp文件信息头结构体

//bmp文件头结构体-》占用14个字节
struct bitmap_header
{
    int16_t type;
    int32_t size; // 图像文件大小
    int16_t reserved1;
    int16_t reserved2;
    int32_t offbits; // bmp图像数据偏移量
}__attribute__((packed));

//bmp位图信息头结构体 -》占用40个字节
struct bitmap_info
{
    int32_t size;   // 本结构大小    
    int32_t width;  // 图像宽
    int32_t height; // 图像高
    int16_t planes;
    int16_t bit_count; // 色深
    int32_t compression;
    int32_t size_img; // bmp数据大小,必须是4的整数倍
    int32_t X_pel;
    int32_t Y_pel;
    int32_t clrused;
    int32_t clrImportant;
}__attribute__((packed));

用户在读取像素数据之前,应该把上述的54个字节先读取出来,再读取像素数据! 
__attribute__((packed)); 把结构体压实,不进行任何的字节对齐方式!  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值