音视频技术应用(5)使用QT渲染RGB数据的一个简单示例

摘要:
首先需要理解RGB三原色,每个颜色其实都可以用一个byte来表示,若R=0,G=0,B=0,用16进制表示则是0x000000,也就是黑色;若R=255,G=255,B=255,用16进制表示则是0xFFFFFF,也就是白色。通过给RGB三原色赋不同的值,可以混合成其它颜色。

这里演示使用QT渲染一幅宽高为1280 * 720的红色RGB图像。

首先需要理解RGB三原色,每个颜色其实都可以用一个byte(0~255)来表示,若R = 0, G = 0, B = 0,用16进制表示则是0x000000,也就是黑色;若R = 255, G = 255, B = 255,用16进制表示则是0xFFFFFF,也就是白色。通过给RGB三原色赋不同的值,可以混合成其它颜色。我们这里要显示纯红色的图像的话,R = 255, G = 0, B = 0,用十六进制表示就是0xFF0000;

下面具体演示一下:

1. 首先新建一个QT项目:

音视频技术应用(5)使用QT渲染RGB数据的一个简单示例第1张

2.在testrgb.h中重写 QT绘制画面的函数:void paintEvent(QPaintEvent *ev)

#pragma once
#include <QtWidgets/QWidget>#include "ui_testrgb.h"

class TestRGB : publicQWidget
{
    Q_OBJECT

public:
    TestRGB(QWidget *parent =Q_NULLPTR);

    //重写绘制画面的函数
    void paintEvent(QPaintEvent *ev) override;
private:
    Ui::TestRGBClass ui;
};

3.在testrgb.cpp中重写绘制画面的函数,并增加下列的code:

#include "testrgb.h"
#include <qpainter.h>#include <qimage.h>

static int w = 1280;
static int h = 720;

TestRGB::TestRGB(QWidget *parent)
    : QWidget(parent)
{
    ui.setupUi(this);
    //重新设定窗口的大小为1280 * 720
resize(w, h);
}


void TestRGB::paintEvent(QPaintEvent*ev)
{
    QImage img(w, h, QImage::Format_RGB888);

    auto data =img.bits();

    //这里采用的像素格式是RGB888,意味着每个像素点有3个RGB分量组成
    //j 表示行数
    for (int j = 0; j < h; j++)
    {   
        //line_R 表示每一行的第一个R分量的位置
        //比如
        //第一行的第一个R分量的下标为: 0 =    1280(每一行的像素数) * 3(单个像素占用的字节数) * 0(行号) 
        //第二行的第一个R分量的下标为:3840 = 1280(每一行的像素数) * 3(单个像素占用的字节数) * 1(行号) 
        int line_R = w * 3 *j;

        //i = 0 表示的是这一行的第1个R分量,i = 3 表示的是每一行的第2个R分量,i=6 表示的是每一行的第三个R分量,依此类推...
        //通过 i + 1 可以取得R分量后面紧跟的G分量,i + 2可以取得G分量后面跟的B分量
        for (int i = 0; i < w * 3; i+=3)
        {
            data[line_R + i] = 255;         //R
            data[line_R + i + 1] = 0;       //G
            data[line_R + i + 2] = 0;       //B
}
    }


    QPainter p;
    p.begin(this);

    p.drawImage(0, 0, img);

    p.end();

}

代码注释已经写得很清楚了,就不再赘述了,其中的img.bits 用于取得对象内部存储的图像数据,接下来的操作其实相当于是给对象内部的图像数据赋值。

运行:

音视频技术应用(5)使用QT渲染RGB数据的一个简单示例第2张

可以看到很容易就能生成一张宽高为1280 * 720的 红色RGB图像。

免责声明:文章转载自《音视频技术应用(5)使用QT渲染RGB数据的一个简单示例》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Tensorflow2.0学习(6)---KerasCache缓存使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

maven filters 和 resource

1 filter 1.1 用途 对多个配置文件进行选择。 1.2 选择的依据 1.3 使用的方式 第一,在<resource>标签下面加<filtering>标签,并且<filtering>标签的值设置为true; 第二,添加<filters>标签,添加<filter>,并且值中使用env变量 第...

linux驱动开发(四) 字符设备驱动框架(自动创建设备节点)

代码如下 #include <linux/init.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/cdev.h>#include <linux/fs.h>#include <linux/device.h...

Qt-数据库操作SQLite

1  简介 参考视频:https://www.bilibili.com/video/BV1XW411x7NU?p=88 说明:本文对在Qt中操作SQLite做简要说明。 SQLite:SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。具体的操作命令可参考:https://www.runoob.com/sqli...

qmake的使用(可设置c编译器flag参数)

本文由乌合之众 lym瞎编,欢迎转载 my.oschina.net/oloroso***还是先说一下当前的系统环境:Ubuntu 14.04 + Qt5.4如果没有安装过QT,可以安装下面几个qt软件 sudo apt-get install qt5-default qt5-doc-html qt5-qmake qt5-doc qt5-image-form...

vs2010驱动开发环境配置

1、文件 -> 新建 -> 项目 -> Visual C++ -> 空项目 名称:Driver 2、生成 -> 配置管理器   活动解决方案配置: 新建 名称:Driver Debug 从此处复制设置:Debug 3、视图 -> 属性管理器  展开刚配置的Driver Debug | Win32  ->  右...

boost asio 学习(五) 错误处理

http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting-started-with-boostasio?pg=6 5. Error handling 接下来我们需要注意的话题是错误处理。换句话说就是函数抛出异常时发生了什么 Boost::asio 给予用户两种选择来处理。错误通过han...