荔枝派Zero(全志V3S)基于QT实现在LCD显示图片

news2024/11/23 22:15:25

文章目录

  • 前言
  • 一、配置 buildroot 及编译
  • 二、写 QT 代码
  • 三、编译可执行文件
  • 四、拷贝到 SD 卡
  • 五、上板子测试
  • 六、资源自取


前言

有这样一个需求,通过配置 QT,在 linux 下实现显示我所想要显示的图片,实现的方式是我可以在命令行将图片的路径作为入参传入进去,从而对其进行显示,在之前的文章中已实现了在板子上运行 QT5 程序,此需求要自己写个 QT 程序,且需要对 buildroot 进行裁剪支持一些常用的图片格式即可。


一、配置 buildroot 及编译

make menuconfig

1、Target packages -> Graphic libraries and applications (graphic/text) -> Qt5 ,勾选上 gui module、widgets module、GIF support、JPEG support、PNG support
在这里插入图片描述
2、保存配置并退出
在这里插入图片描述
3、编译 buildroot
回到 buildroot-2017.08 的根目录下,执行 make,等待编译结束

二、写 QT 代码

在这里插入图片描述
main.cpp

#include "widget.h"

#include <QApplication>
#include <QString>
#include <QDebug>

QString image_path;

int main(int argc, char *argv[])
{
    if (argc < 2) {
        qDebug() << "pelase input image path\n";

        return -1;
    }
    image_path = argv[1];
    qDebug() << "image_path = " << image_path << "\n";

    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QLabel>
#include <QMovie>
#include <QImage>
#include <QPainter>

extern QString image_path;

void Widget::paintEvent(QPaintEvent *e)
{
    QPainter painter(this);
    QPixmap pix;
    pix.load(image_path);
    painter.drawPixmap(0, 0, 800, 480, pix);
}

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    resize(800, 480); // 设置窗口大小
}

Widget::~Widget()
{
    delete ui;
}

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    void paintEvent(QPaintEvent *);

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

ImageShow.pro

QT += widgets

HEADERS       = widget.h
FORMS         = widget.ui
SOURCES       = main.cpp \
                widget.cpp

# install
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/widgets/ImageShow
INSTALLS += target

widget.ui 界面没有放置控件,因此这里不罗列出来了

三、编译可执行文件

1、在 ~/licheepi_zero/buildroot-2017.08/output/build/qt5base-5.6.2/examples/widgets/widgets/ 目录下新建一个名为 ImageShow 的文件夹,将上述文件放置进去,并赋予权限

mkdir ImageShow
sudo chmod 777 ImageShow/ -R
cd ImageShow
ls

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2、qmake

/home/Gnep/licheepi_zero/buildroot-2017.08/output/build/qt5base-5.6.2/bin/qmake ImageShow.pro

在这里插入图片描述
3、make

make

在这里插入图片描述

四、拷贝到 SD 卡

1、把 buildroot-2017.08 产生的 rootfs.tar 解压到刚创建的rootfs分区根目录
在 buildroot-2017.08 根目录下

find ./ -name rootfs.tar
sudo tar xf ./output/images/rootfs.tar -C /media/Gnep/rootfs/

在这里插入图片描述
2、将上述编译好的可执行文件也拷贝到 SD 卡的 rootfs 分区

sudo cp ImageShow /media/Gnep/rootfs/

在这里插入图片描述
3、此外也找两张图片拷贝到 SD 卡的 rootfs 分区,一张为 google.png,另一张为 Spongebob.jpg

五、上板子测试

1、到根目录下 ls 查看一下我们需要用到的文件

cd /
ls

在这里插入图片描述
2、运行 ImageShow 并指定图片路径,查看 LCD 屏幕
①、显示 google.png

./ImageShow google.png   -platform linuxfb

在这里插入图片描述
在这里插入图片描述

②、显示 Spongebob.jpg

./ImageShow Spongebob.jpg  -platform linuxfb

在这里插入图片描述
在这里插入图片描述

问题记录
第一次在板子上测试的时候屏幕为白屏,图片显示不出来,后来将 buildroot 先执行了 make distclen 再重新编译了 buildroot 后再次上板子测试才解决了问题

六、资源自取

方式1:github链接
https://github.com/Gnepuil79/licheepi.git

方式2:百度网盘
链接:https://pan.baidu.com/s/1SXujbJoftOgDPj-0rwqmfA
提取码:7dsk


我的qq:2442391036,欢迎交流!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/472774.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能之配置环境教程二:在Anaconda中创建虚拟环境安装GPU版本的Pytorch及torchvision并在VsCode中使用虚拟环境

人工智能之配置环境教程二&#xff1a;在Anaconda中创建虚拟环境安装GPU版本的Pytorch及torchvision并在VsCode中使用虚拟环境 作者介绍一. 查看自己电脑的CUDA版本1.1 方式一1.2 方式二 二. 下载安装CUDA三. 查看环境变量四. 创建虚拟环境4.1 使用指令创建虚拟环境4.2 查看Anc…

【刷题之路Ⅱ】LeetCode 24. 两两交换链表中的节点

【刷题之路Ⅱ】LeetCode 24. 两两交换链表中的节点 一、题目描述解题1、方法1——递归1.1、思路分析1.2、代码实现 2、方法2——迭代2.1、思路分析2.2、代码实现 3、方法3——交替的尾插3.1、思路分析3.2、代码实现 一、题目描述 原题连接&#xff1a; 24. 两两交换链表中的节…

人群计数经典方法Density Map Estimation,密度图估计

&#xff08;3&#xff09;Density Map Estimation&#xff08;主流&#xff09; 这是crowd counting的主流方法 传统方法不好在哪里&#xff1f;object detection-based method和regression-based method无法从图像中提取更抽象的有助于完成人群计数任务的语义特征 概况&…

asp.net个人信息管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net个人信息管理系统 是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语言 开发 asp.net个人信息管理系统VS开发s…

第七章 单行函数

MySQL系列文章目录 http://t.csdn.cn/YTPe9 文章目录 MySQL系列文章目录前言一、函数的理解1、 什么是函数2 、不同DBMS函数的差异3 、MySQL的内置函数及分类 二、 数值函数1 、基本函数2、 角度与弧度互换函数3、 三角函数4、 指数与对数5、进制间的转换 三、字符串函数四、日…

音视频八股文(8)-- h264 AnnexB

NALU(Network Abstract Layer Unit) ⾳视频编码在流媒体和⽹络领域占有重要地位&#xff1b;流媒体编解码流程⼤致如下图所示&#xff1a; H264简介 H.264从1999年开始&#xff0c;到2003年形成草案&#xff0c;最后在2007年定稿有待核实。在ITU的标准⾥称为H.264&#xff0c…

Docker快速创建一个单机版的Jenkins实例

目录 一、创建 Jenkins 实例 二、Pipeline 项目 三、总结 谈到 CI/CD&#xff0c;那便少不了这里面的佼佼者 Jenkins&#xff0c;正如 Jenkins 官网说的一样&#xff1a;“Build great things at any scale”&#xff0c;构建伟大&#xff0c;无所不能&#xff01; 话不多说…

常用传感器-温湿度传感器SHT30

SHT30温湿度传感器 基本信息 工作电压&#xff1a;2.4V-5.5V 通讯协议&#xff1a;IIC 湿度测量范围&#xff1a;0-100 温度测量范围&#xff1a;-40-125 引脚 VIN&#xff1a;电源正极GND&#xff1a;电源负极SCL&#xff1a;数据线SDA&#xff1a;数据线 操作 1.加载库…

digiKam 8.0发布,带来了许多新的功能和改进

导读digiKam 8.0开源、跨平台、免费的专业照片管理软件现在可以下载&#xff0c;这是一个重大更新&#xff0c;带来了许多新的功能和改进。 digiKam 8.0最大的变化是&#xff0c;该软件被移植到最新的Qt 6开源应用框架&#xff0c;以获得更现代和面向未来的体验。然而&#xff…

MATLAB矩阵运算

文章目录 前言一、矩阵的输入与结构操作1-1 矩阵输入1-2 矩阵扩充&#xff08;1&#xff09;扩充行&#xff08;2&#xff09;扩充列&#xff08;3&#xff09;其他命令&#xff08;4&#xff09;矩阵的修改和元素的删除 1-3 特殊矩阵生成 二、矩阵的计算2-1 、矩阵的基本运算2…

详解时间复杂度和空间复杂度问题

前言&#xff1a;本来我并不认为时间复杂度和空间复杂的有多重要&#xff0c;只要日常会判断和分析算法的复杂度即可&#xff0c;但是&#xff0c;不论是在考研的数据结构与算法中&#xff0c;还是在日常的刷题中&#xff0c;我们都会见到&#xff0c;限制我们时间和空间复杂度…

RK3588平台开发系列讲解(进程篇)Linux中进程的一生

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、Linux 系统中进程的一生二、Linux 系统中的进程树三、Linux 进程的分类四、进程优先级五、进程系统调用沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍 Linux 进程的相关知识。 一、Linux 系统…

vscode开发wdk

findwdk https://github.com/SergiusTheBest/FindWDK.git 拷贝FindWdk.cmake模块到下面路径中 CMake\share\cmake-3.22\Modules 注意定义系统变量或者修改下面路径&#xff0c;确保能找到wdk工具路径 构建项目 cmake中构建项目通过wdk_add_driver实现 wdk_add_driver(simp…

深度学习训练营之彩色图片分类2

深度学习训练营之彩色图片分类 原文链接环境介绍前置工作设置GPU 导入数据数据查看 构建CNN网络CNN网络的简单介绍代码 进行编译模型训练正式训练 结果可视化使用准确度和损失值进行结果的优良进行分析 原文链接 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习…

【源码解析】SpringBoot日志系统源码分析

LoggingApplicationListener 日志组件的处理是LoggingApplicationListener实现的。LoggingApplicationListener#onApplicationEvent&#xff0c;监听事件。如果实现接口GenericApplicationListener&#xff0c;可以允许适配事件类型。 private static final Class<?>[]…

升级OpenAi/ChatGPT为收费账号绑定API全过程

前言 自从4月1日开始&#xff0c;第一批用户的API就已经过期了&#xff0c;大家可能重新注册新的账号来免费获取ChatGPT/OpenAi的API额度&#xff0c;需要没有18美元额度&#xff0c;但5美元也能调用不少了&#xff0c;一个账号不够&#xff0c;两个&#xff0c;三个&#xff…

NetSuite 负库存控制功能包

目录 1. 前言 2. 功能说明 2.1概述 2.2控制逻辑说明 3. 安装 4. 设置 4.1角色设置 4.2参数设置 4.3负库存追踪记录设置 5. 视频链接 1. 前言 在NetSuite的项目实践中&#xff0c;NetSuite既有功能未能解决用户所面临的负库存问题。参看NetSuite知识会的前期文章&…

《Netty》从零开始学netty源码(四十六)之PooledByteBuf

PooledByteBuf Netty中一大块内存块PoolChunk默认大小为4MB&#xff0c;为了尽可能充分利用内存会将它切成很多块PooledByteBuf&#xff0c;PooledByteBuf的类关系图如下&#xff1a; PooledUnsafeDirectByteBuf与PooledUnsafeHeapByteBuf直接暴露对象的底层地址。 PooledByt…

连续三年增长,徐福记为什么越战越勇?

30年&#xff0c;一个零食品牌能发生什么变化&#xff1f;对徐福记来说&#xff0c;这是一场漫长的拉力赛。 这个过程&#xff0c;是研究消费者喜好变迁的过程&#xff0c;是孜孜不倦创新原料、产品、生产工艺和先进技术的过程&#xff0c;更是徐福记证明自身品牌价值的过程—…

Nero Platinum Suite 2023 白金套装DVD刻录软件 -您强大的无忧包

为什么选择 Nero Platinum&#xff1f; 相信市场领导者&#xff1a;使用这7个搭配和谐的程序&#xff0c;您可以轻松应对多媒体日常。Nero Platinum Suite – 您强大的无忧包 最佳准备 超过 200 种功能为每一项多媒体应用提供解决方案。技术上始终处于最新状态 品质卓越 针…