新手上路
- 积分
- 27
- 金钱
- 27
- 注册时间
- 2020-12-10
- 在线时间
- 2 小时
|
原图是一张完整的图片,这里只显示了一部分,而且效果很糟糕!以下是我的代码:求助
#include <stdio.h>
#include <sysKpes.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys§an.h>
#define H 600
#define W 1024
#define SIZE_LCD H*W*4
#define SIZE_BMP H*W*3
int main(int argc, char const *argv[])
{
// 打开显示器的设备文件 /dev/fb0
int fd_lcd = open("/dev/fb0", O_RDWR);
if (-1 == fd_lcd)
{
perror("open fb0 error ");
return -1 ;
}
//内存映射
int * p_lcd = (int * )mmap(NULL, SIZE_LCD ,
PROT_WRITE | PROT_READ , MAP_SHARED, fd_lcd , 0);
if (MAP_FAILED == p_lcd)
{
perror("mmap error");
return -1 ;
}
int fd_bmp = open("./log.bmp", O_RDONLY);
if (-1 == fd_bmp)
{
perror("open BMP error ");
return -1 ;
}
//读取图片信息
char buf_bmp [SIZE_BMP];
int ret = read(fd_bmp, buf_bmp , SIZE_BMP);
printf("read: %d \n", ret );
//24转32
int buf_lcd [H][W];
int x , y ;
for (y = 0; y < 600; y++)
{
for (x = 0; x < 1024; x++)//上述宏中,LCD为32,而BMP是24
{
buf_lcd [599-y][x] = buf_bmp[(y*1024 + x)*3 + 0] << 0 |
buf_bmp[(y*1024 + x)*3 + 1] << 8 |
buf_bmp[(y*1024 + x)*3 + 2] << 16 ;
}
}
// 写入颜色信息
for (y = 0; y < 600; y++)
{
for (x = 0; x < 1024; x++)
{
*(p_lcd+x+y*1024) = buf_lcd [y][x] ;
}
}
//关闭设备文件
close(fd_lcd);
close(fd_bmp);
return 0;
} |
-
|