2.2 RGB像素格式原理-实验QT渲染

.pro文件

#-------------------------------------------------
#
# Project created by QtCreator 2022-05-31T09:57:32
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = FFmpeg_SDL
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

INCLUDEPATH += $$PWD/include

#添加c++11支持
QMAKE_CXXFLAGS += -std=c++0x

LIBS += $$PWD/lib/win32/avcodec.lib \
        $$PWD/lib/win32/avdevice.lib \
        $$PWD/lib/win32/avfilter.lib \
        $$PWD/lib/win32/avformat.lib \
        $$PWD/lib/win32/avutil.lib \
        $$PWD/lib/win32/postproc.lib \
        $$PWD/lib/win32/swresample.lib \
        $$PWD/lib/win32/swscale.lib \

mainwindows.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    //重载一下绘制画面的函数,渲染
    void paintEvent(QPaintEvent *ev) override;

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

main.cpp

#include "mainwindow.h"
#include <QApplication>
#include <QDebug>

//报错提示,需要加入这个文件
#define __STDC_CONSTANT_MACROS

extern "C"{
//指定函数是c语言函数,函数名不包含重载标注
//引用ffmpeg头文件
    #include <libavcodec/avcodec.h>
    #include <libavdevice/avdevice.h>
    #include <libavformat/avformat.h>
    #include <libavutil/avconfig.h>
    #include <libswscale/swscale.h>
    #include <libswresample/swresample.h>
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    //显示当前ffmpeg的版本号
    qDebug() << av_version_info();
   return a.exec();
}

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
//绘制图像
#include <QPainter>
//使用QPaint绘制QImage
#include <QImage>
//定义窗口大小
static int w = 1280;
static int h = 720;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //改变窗口大小
    resize(w,h);
}

MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::paintEvent(QPaintEvent *ev)
{

    //要显示的图像,w:宽,h:高 ,格式
    QImage img(w,h,QImage::Format_RGB888);
    //填充图像
    auto d = img.bits();
    unsigned char r = 255;
    for(int j = 0;j < h;j++){
        r--;
        int b = j * w * 3;//前边的总大小
        for(int i = 0;i < w*3;i += 3){
            d[b+i]        = r;  //r
            d[b+i+1]      = 0;    //g
            d[b+i+2]      = 0;    //b
        }
    }
    //实例化对象
    QPainter p;

    p.begin(this);//开始

    p.drawImage(0,0,img);

    p.end();//结束
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值