利用framebuffer,命令行显示图片

上代码

import fcntl
import struct
import mmap
import contextlib
import os
import time
import numpy as np
import cv2

src = cv2.imread(‘./1.bmp‘, cv2.IMREAD_COLOR)
img = src#[0:100, 0:400]
print img.shape

with open(‘/dev/fb0‘, ‘r+b‘) as fbfd:
    fb_fix_screeninfo = struct.pack(‘16sLIIIIIIIILIIHHH‘,
                                    ‘0000000000000000‘,
                                    0L, 0,0,0,0,0,0,0,0,
                                    0L, 0, 0, 0, 0, 0)
    ‘‘‘
    struct fb_fix_screeninfo {
            char id[16];            /* identification string eg "TT Builtin" */
            unsigned long smem_start;    /* Start of frame buffer mem */
                                            /* (physical address) */
            __u32 smem_len;            /* Length of frame buffer mem */
            __u32 type;            /* see FB_TYPE_*        */
            __u32 type_aux;            /* Interleave for interleaved Planes */
            __u32 visual;            /* see FB_VISUAL_*        */
            __u16 xpanstep;            /* zero if no hardware panning  */
            __u16 ypanstep;            /* zero if no hardware panning  */
            __u16 ywrapstep;        /* zero if no hardware ywrap    */
            __u32 line_length;        /* length of a line in bytes    */
            unsigned long mmio_start;    /* Start of Memory Mapped I/O   */
                                            /* (physical address) */
            __u32 mmio_len;            /* Length of Memory Mapped I/O  */
            __u32 accel;            /* Indicate to driver which    */
                                            /*  specific chip/card we have    */
            __u16 capabilities;        /* see FB_CAP_*            */
            __u16 reserved[2];        /* Reserved for future compatibility */
    };
    ‘‘‘
    fb_fix_screeninfo = fcntl.ioctl(fbfd, 0x4602, fb_fix_screeninfo)
    fb_fix_screeninfo = struct.unpack(‘16sLIIIIIIIILIIHHH‘, fb_fix_screeninfo)
    lineLength = fb_fix_screeninfo[8]

    fb_var_screeninfo = struct.pack(‘IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII‘,
                                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
                                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
    ‘‘‘
    struct fb_bitfield {
            __u32 offset;            /* beginning of bitfield    */
            __u32 length;            /* length of bitfield        */
            __u32 msb_right;        /* != 0 : Most significant bit is */
                                            /* right */
    };
    struct fb_var_screeninfo {
            __u32 xres;            /* visible resolution        */
            __u32 yres;
            __u32 xres_virtual;        /* virtual resolution        */
            __u32 yres_virtual;
            __u32 xoffset;            /* offset from virtual to visible */
            __u32 yoffset;            /* resolution            */

            __u32 bits_per_pixel;        /* guess what            */
            __u32 grayscale;        /* 0 = color, 1 = grayscale,    */
                                            /* >1 = FOURCC            */
            struct fb_bitfield red;        /* bitfield in fb mem if true color, */
            struct fb_bitfield green;    /* else only length is significant */
            struct fb_bitfield blue;
            struct fb_bitfield transp;    /* transparency            */    

            __u32 nonstd;            /* != 0 Non standard pixel format */

            __u32 activate;            /* see FB_ACTIVATE_*        */

            __u32 height;            /* height of picture in mm    */
            __u32 width;            /* width of picture in mm     */

            __u32 accel_flags;        /* (OBSOLETE) see fb_info.flags */

            /* Timing: All values in pixclocks, except pixclock (of course) */
            __u32 pixclock;            /* pixel clock in ps (pico seconds) */
            __u32 left_margin;        /* time from sync to picture    */
            __u32 right_margin;        /* time from picture to sync    */
            __u32 upper_margin;        /* time from sync to picture    */
            __u32 lower_margin;
            __u32 hsync_len;        /* length of horizontal sync    */
            __u32 vsync_len;        /* length of vertical sync    */
            __u32 sync;            /* see FB_SYNC_*        */
            __u32 vmode;            /* see FB_VMODE_*        */
            __u32 rotate;            /* angle we rotate counter clockwise */
            __u32 colorspace;        /* colorspace for FOURCC-based modes */
            __u32 reserved[4];        /* Reserved for future compatibility */
    };‘‘‘
    fb_var_screeninfo = fcntl.ioctl(fbfd, 0x4600, fb_var_screeninfo)
    fb_var_screeninfo = struct.unpack(‘IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII‘, fb_var_screeninfo)

    screen_x = fb_var_screeninfo[0]
    screen_y = fb_var_screeninfo[1]
    bitPerPix = fb_var_screeninfo[6]
    print("%d*%d, %dbpp" %(fb_var_screeninfo[0], fb_var_screeninfo[1], fb_var_screeninfo[6]))

    screensize = fb_var_screeninfo[0] * fb_var_screeninfo[1] * fb_var_screeninfo[6] / 8
    print ‘screensize=‘ + str(screensize)

    with contextlib.closing(mmap.mmap(fbfd.fileno(), screensize, flags=mmap.MAP_SHARED,
                                       access=mmap.ACCESS_WRITE)) as fbp:

##        print fbp.size()
        loc = 0
        linex = 0
        for y in range(img.shape[0]):
            for x in range(img.shape[1]):

                loc = (y*lineLength) + (x*bitPerPix/8)
                fbp[loc] = chr(img[y][x][0])
                fbp[loc+1] = chr(img[y][x][1])
                fbp[loc+2] = chr(img[y][x][2])
                fbp[loc+3] = chr(255)
##
##        r = fbp.flush()

##        time.sleep(3)
时间: 2024-10-26 10:05:55

利用framebuffer,命令行显示图片的相关文章

MYSQL 命令行显示乱码 解决方案

中文乱码是因为编码集不支持,所以要改变编码 先查看下设置的编码 使用如下命令 show variables like 'character%'; 在 mysql.conf (Ubuntu mysql5.5)中的 [client]区域加上 default-character-set = utf8 在[mysqld]区域加上 character_set_server = utf8 重启服务 原文地址:MYSQL 命令行显示乱码 解决方案

SSH Secure Shell Client连接Linux 命令行显示中文乱码问题 和oracle 查询数据中文乱码问题

一.SSH Secure Shell Client连接Linux 命令行显示中文乱码问题 linux 设置系统语言 修改 /etc/sysconfig/i18n 文件,如 LANG="en_US.UTF-8",xwindow会显示英文界面, LANG="zh_CN.GB18030",xwindow会显示中文界面. 还有一种方法 cp /etc/sysconfig/i18n $HOME/.i18n 修改 $HOME/.i18n 文件(vim  $HOME/.i18n)

SMTP协议--在cmd下利用bat命令行发送邮件

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议 选择‘开始’-‘运行’,输入cmd,进入命令提示符窗口. Windows7默认没有开始Telnet服务,请在运行窗口中输入 sc start TlntSvr 开启Telnet服务! 第一步,远程登录smtp服务器 在命令行窗口输入 telnet smtp.qq.com 25   然后回车 (此处以QQ邮箱为例,163邮箱可输入smtp.163.com .25表示建立连接的端口号) SMTP协议--在cmd下

将图片转换为Framebuffer格式(终端显示图片)

要在ubuntu终端显示图片或者在板子的LCD显示图片,Framebuffer是一个简单易用的接口,直接写入像素信息即可. 但普通的图片带有头部信息或者编码格式不同,直接送入Framebuffer是显示不出来的,需要扣出像素信息,并按照Framebuffer的RGBA顺序调整好,才能显示.所以现在的问题就是,如何获取framebuffer的信息,以及如何调整图片. 第一个问题,如何获取framebuffer的信息 对于ubuntu,可以安装fbset 进行查看 sudo apt-get inst

windows下cmd命令行显示UTF8字符设置(CHCP命令)

在中文windows系统中,如果一个文本文件是utf-8编码的,那么在cmd.exe命令行窗口(所谓的dos窗口)中不能正确显示文件中的内容.在默认情况下,命令行窗口中使用的代码页是中文或者美国的,即编码是中文字符集或者西文字符集. 如果想正确显示UTF-8字符,可以按照以下步骤操作: 1.打开CMD.exe命令行窗口 2.通过 chcp命令改变代码页,UTF-8的代码页为65001 1 chcp 65001 执行该操作后,代码页就被变成UTF-8了.但是,在窗口中仍旧不能正确显示UTF-8字符

开发利器_ImageMagick.基于Linux命令行的图片缩放/编辑/格式转换?

简单介绍: ImageMagick是一系列的用于修改,加工图像的命令行工具,能够快速地使用命令行对图片进行操作,对大量的图片进行批处理,它能执行相当多操作,本文涉及的只是开发中常用的技能. 快速安装: yum -y install epel-release yum install -y ImageMagick ImageMagick-devel 格式转换: convert 1.png 1.jpg 缩放图像: convert 1.jpg -resize 499x 1.jpg 说明: ImageMa

Phantomjs 在cmd命令行显示中文乱码

cmd命令行窗口显示中文乱码,多是因为cmd命令行窗口字符编码不匹配导致. 修改cmd窗口字符编码为UTF-8,命令行中执行:chcp 65001 切换回中文:chcp 936 一般情况下 命令行中执行:chcp 65001后

windows下cmd命令行显示UTF8字符设置

问题描述:cmd命令行下,无法显示中文 解决办法: 修改字符集 1.进入cmd,执行命令:chcp 65001 2.修改窗口属性,改变字体,将字体修改为True Type字体"Lucida Console 3.如果是要在redis-cli中显示中文,要在命令后面接--raw,命令范例如下: redis-cli.exe -h 192.168.x.x -p 6379 --raw --raw 显示中文,而不是"\xd6\xd0" 通过以上操作并不能完全解决问题,因为显示出来的内容有

30. CentOS终端命令行显示中文乱码的解决方法

安装CentOS的时候选择了中文,结果在终端不能显示中文,都是乱码,解决方法:修改/etc/sysconfig/i18n,内容为 代码如下: LANG="zh_CN.GB18030"LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en"SYSFONT="lat0-sun16" 退出重新登录即