主题 : 友善之臂smart210,打开一张图片花屏 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 115253
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
综合积分: 18 分
注册时间: 2015-05-10
最后登录: 2015-06-12
楼主  发表于: 2015-06-10 16:01

 友善之臂smart210,打开一张图片花屏

各位前辈们,大家好,有时间帮我解决一下么?
首先,我使用的是smart210开发板,在使用LCD显示一张.bmp图片的时候假如它的像素是800*480的时候能正常的显示。但是你在Windows下截个800*480的图,然后修改它的属性为.bmp,显示的时候就花屏了。
然后就是我使用摄像头采集到的图片在.pyuvplayer上选择680*480分辨率,属性为RGB24的时候能正常显示图片。但是在LCD上显示的时候也是花屏了。请问有什么可以解决的办法么?
级别: 新手上路
UID: 115253
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
综合积分: 18 分
注册时间: 2015-05-10
最后登录: 2015-06-12
1楼  发表于: 2015-06-10 16:31
图片:
这是我摄像头采集的图片,在pyuvplayer下打开,焦距不对,请不要介意
级别: 新手上路
UID: 115253
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
综合积分: 18 分
注册时间: 2015-05-10
最后登录: 2015-06-12
2楼  发表于: 2015-06-10 16:32
图片:
这是我开发板上显示结果
级别: 新手上路
UID: 115253
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
综合积分: 18 分
注册时间: 2015-05-10
最后登录: 2015-06-12
3楼  发表于: 2015-06-10 16:33
最后是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <strings.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <unistd.h>

int main(int agrc, char **agrv)
{
    int fd,bmpfd;
    int x=0, y=0, k=0;
        char buf;
    int *buffer = NULL;
    
    //char bmp[800*480*3];
    char bmp[640*480*3];

        fd = open("/dev/fb0", O_RDWR);    
        if(fd < 0)
        {
                perror("error!can't open /dev/fb0");
                exit(-1);
        }

    bmpfd = open("./image.bmp", O_RDWR);
        if(bmpfd < 0)
        {
                perror("error!can't open image");
                exit(-1);
        }

    buffer = (int *)mmap(NULL, 640*480*4, PROT_READ|PROT_WRITE, MAP_SHARED,fd, 0);
    //for(x=0; x<480; x++)
    //    for(y=0; y<800;y++)
    //        buffer[x*640+y] = 0x00ff0000;

//    lseek(bmpfd, 54, SEEK_CUR);
    read(bmpfd,bmp,640*480*3);
    for(x=480-1; x>=0; x--)
               for(y=0; y<640;y++)
        {
                        buffer[x*640+y] = bmp[2+k*3]<<16|bmp[1+3*k]<<8|bmp[0+k*3];
            k++;
        }


    //if(!strcasecmp(agrv[1], "on"))
        buf = 0x00;
    //else
    //    buf = 0x01;
    write(fd,&buf,1);
    
    close(fd);
    return 0;
}