CN110766599A - 一种利用Qt Quick绘制图像时防止出现白屏的方法及系统 - Google Patents

一种利用Qt Quick绘制图像时防止出现白屏的方法及系统 Download PDF

Info

Publication number
CN110766599A
CN110766599A CN201810836084.0A CN201810836084A CN110766599A CN 110766599 A CN110766599 A CN 110766599A CN 201810836084 A CN201810836084 A CN 201810836084A CN 110766599 A CN110766599 A CN 110766599A
Authority
CN
China
Prior art keywords
class
function
creating
calling
image
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201810836084.0A
Other languages
English (en)
Other versions
CN110766599B (zh
Inventor
杨亮
陈少杰
张文明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan Douyu Network Technology Co Ltd
Original Assignee
Wuhan Douyu Network Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Wuhan Douyu Network Technology Co Ltd filed Critical Wuhan Douyu Network Technology Co Ltd
Priority to CN201810836084.0A priority Critical patent/CN110766599B/zh
Publication of CN110766599A publication Critical patent/CN110766599A/zh
Application granted granted Critical
Publication of CN110766599B publication Critical patent/CN110766599B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Generation (AREA)
  • Processing Or Creating Images (AREA)

Abstract

本发明公开了一种利用Qt Quick绘制图像时防止出现白屏的方法及系统,涉及图形绘制技术领域,所述方法包括步骤:创建QmlMediaDecoder类;获取渲染API类型;若获取到的API类型为OpenGL时,使用QQuickFrameBufferObject绘制视频图像;若获取到的API类型不为OpenGL时,使用QuickPainterRender绘制视频图像。本发明提供的利用Qt Quick绘制图像时防止出现白屏的方法,无论API类型是否为OpenGL,利用Qt Quick绘制图像时均不会出现白屏的现象,提高了PC客户端的系统兼容性。

Description

一种利用Qt Quick绘制图像时防止出现白屏的方法及系统
技术领域
本发明涉及图形绘制技术领域,具体涉及一种利用Qt Quick绘制图像时防止出现白屏的方法及系统。
背景技术
通常在PC客户端项目的开发中,采用的是开源的Qt开发库中的Qt Quick模块,来开发应用程序的图形交互界面。在使用Qt Quick开发库时,在Windows桌面应用程序下,默认使用的是OpenGL的图形渲染API,所以在PC客户端绘制直播视频图像时,也使用的是OpenGL的API来渲染图像。
然而,在实际使用中,部分PC客户端绘制视频图像的区域全是白屏,没有正确的绘制出视频图像。经调查发现,造成上述白屏现象的原因是,电脑上没有正确的创建出OpenGL的绘制环境,因此,亟待解决利用Qt Quick绘制图像时出现白屏的现象。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种利用Qt Quick绘制图像时防止出现白屏的方法,无论API类型是否为OpenGL,利用Qt Quick绘制图像时均不会出现白屏的现象,提高了PC客户端的系统兼容性。
为达到以上目的,本发明采取的技术方案是:
一种利用Qt Quick绘制图像时防止出现白屏的方法,包括步骤:
创建QmlMediaDecoder类,并对其进行初始化;
在初始化QmlMediaDecoder类时,获取渲染API类型;
若获取到的API类型为OpenGL时,则利用QmlMediaDecoder类创建QQuickFrameBufferObject,并使用QQuickFrameBufferObject绘制视频图像;
若获取到的API类型不为OpenGL时,则利用QmlMediaDecoder类创建QuickPainterRender,并使用QuickPainterRender绘制视频图像。
在上述技术方案的基础上,获取渲染API类型的具体步骤包括:
调用QQuickWindow的currentWindow静态方法,获取到当前的QQuickWindow对象;
调用该QQuickWindow对象的renderInterface函数,获取到QSGRendererInterface对象;
调用该QSGRendererInterface对象的graphicsApi函数,获取到当前渲染API类型。
在上述技术方案的基础上,使用QQuickFrameBufferObject绘制视频图像的具体步骤包括:
创建QuickFrameBufferObjectRender类,该QuickFrameBufferObjectRender类继承QQuickFrameBufferObject类,QuickFrameBufferObject类有一个纯虚函数createRenderer,所述createRenderer纯虚函数返回一个Renderer抽象类,所述Renderer抽象类有一个纯虚函数render;
在QuickFrameBufferObjectRender类的createRenderer纯虚函数中创建FBORender类,该FBORender类继承Renderer类;
调用FBORender类的render函数,并在render函数中调用OpenGL的相关API绘制视频图像。
在上述技术方案的基础上,使用QuickPainterRender绘制视频图像的具体步骤包括:
QuickPainterRender继承QQuickPaintedItem类,并实现QQuickPaintedItem类的paint函数,在QQuickPaintedItem类的paint函数中,创建QPainter类;
构造QImage函数,在QuickPainterRender的paint函数中,分别调用IVideoFrameBuffer接口的buffer函数、width函数以及height函数,对应获取图像的像素内容、图像的宽度以及图像的高度,并将图像的像素内容、图像的宽度、图像的高度和像素格式均传入到QImage函数的参数中,完成QImage的创建;
调用QPainter类的drawImage函数,将创建后的QImage传入到drawImage函数中,完成视频图像的绘制。
本发明还提供了一种存储介质,该存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述利用Qt Quick绘制图像时防止出现白屏的方法。
本发明还提供了一种电子设备,包括存储器和处理器,存储器上储存有在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述利用Qt Quick绘制图像时防止出现白屏的方法。
本发明还提供了一种利用Qt Quick绘制图像时防止出现白屏的系统,包括:
创建模块,其用于创建QmlMediaDecoder类,并对其进行初始化;
获取模块,其用于在初始化QmlMediaDecoder类时,获取渲染API类型;
第一处理模块,其用于当获取到的API类型为OpenGL时,利用QmlMediaDecoder类创建QQuickFrameBufferObject,并使用QQuickFrameBufferObject绘制视频图像;
第二处理模块,其用于当获取到的API类型不为OpenGL时,利用QmlMediaDecoder类创建QuickPainterRender,并使用QuickPainterRender绘制视频图像。
在上述技术方案的基础上,所述获取模块具体包括:
第一获取单元,其用于调用QQuickWindow的currentWindow静态方法,获取到当前的QQuickWindow对象;
第二获取单元,其用于调用该QQuickWindow对象的renderInterface函数,获取到QSGRendererInterface对象;
第三获取单元,其用于调用该QSGRendererInterface对象的graphicsApi函数,获取到当前渲染API类型。
在上述技术方案的基础上,所述第一处理模块具体包括:
QuickFrameBufferObjectRender类创建单元,其用于创建QuickFrameBufferObjectRender类,该QuickFrameBufferObjectRender类继承QQuickFrameBufferObject类,QuickFrameBufferObject类有一个纯虚函数createRenderer,所述createRenderer纯虚函数返回一个Renderer抽象类,所述Renderer抽象类有一个纯虚函数render;
FBORender类创建单元,其用于在QuickFrameBufferObjectRender类的createRenderer纯虚函数中创建FBORender类,该FBORender类继承Renderer类;
第一绘制单元,其用于调用FBORender类的render函数,并在render函数中调用OpenGL的相关API绘制视频图像。
在上述技术方案的基础上,所述第二处理模块具体包括:
QuickPainterRender创建单元,其用于创建QuickPainterRender类,并继承QQuickPaintedItem类,且实现QQuickPaintedItem类的paint函数;
QPainter类创建单元,其用于在QQuickPaintedItem类的paint函数中,创建QPainter类;
QImage创建单元,其用于构造QImage函数,在QuickPainterRender的paint函数中,分别调用IVideoFrameBuffer接口的buffer函数、width函数以及height函数,对应获取图像的像素内容、图像的宽度以及图像的高度,并将图像的像素内容、图像的宽度、图像的高度和像素格式均传入到QImage函数的参数中,完成QImage的创建;
第二绘制单元,其用于调用QPainter类的drawImage函数,将创建后的QImage传入到drawImage函数中,完成视频图像的绘制。
与现有技术相比,本发明的优点在于:本发明的利用Qt Quick绘制图像时防止出现白屏的方法,通过获取渲染API类型,再根据API类型来选择使用不同的方法来进行视频图像的绘制,当API类型为OpenGL时,使用QQuickFrameBufferObject绘制视频图像,不仅绘制效率高,而且不会出现白屏,当API类型不为OpenGL时,使用QuickPainterRender绘制视频图像,如此,即使API类型不为OpenGL,也可以通过QuickPainterRender顺利完成视频图像的绘制,不会出现白屏,从而可以解决利用Qt Quick绘制图像时出现白屏的现象,提高PC客户端的系统兼容性。
附图说明
图1为本发明实施例一中利用Qt Quick绘制图像时防止出现白屏的方法流程图;
图2为本发明实施例三中电子设备的结构框图。
具体实施方式
以下结合附图及实施例对本发明作进一步详细说明。
实施例一
参见图1所示,本发明实施例提供一种利用Qt Quick绘制图像时防止出现白屏的方法,包括步骤:
S1:创建QmlMediaDecoder类,并对其进行初始化;
QmlMediaDecoder为一个继承于QQuickItem的类,QQuickItem是QtQuick中大部分类的基类,表示一个基本的控件,描述了这些控件最基本的信息,例如大小,位置等;
S2:在初始化QmlMediaDecoder类时,获取渲染API类型;
在本发明实施例中,获取QtQuick的渲染API是通过调用QtQuick中的QSGRenderInterface类的graphicsApi方法获取的,而QSGRenderInterface接口又与当前的QQuickWindow类实例相关的;
S3:若获取到的API类型为OpenGL时,则利用QmlMediaDecoder类创建QQuickFrameBufferObject,并使用QQuickFrameBufferObject绘制视频图像;
S4:若获取到的API类型不为OpenGL时,则利用QmlMediaDecoder类创建QuickPainterRender,并使用QuickPainterRender绘制视频图像。
在本发明实施例中,利用Qt Quick绘制图像时防止出现白屏的方法,通过获取渲染API类型,再根据API类型来选择使用不同的方法来进行视频图像的绘制,当API类型为OpenGL时,使用QQuickFrameBufferObject绘制视频图像,不仅绘制效率高,而且不会出现白屏,当API类型不为OpenGL时,使用QuickPainterRender绘制视频图像,如此,即使API类型不为OpenGL,也可以通过QuickPainterRender顺利完成视频图像的绘制,不会出现白屏,从而可以解决利用Qt Quick绘制图像时出现白屏的现象,提高PC客户端的系统兼容性。
进一步地,上述步骤S2中获取渲染API类型的具体步骤包括:
S201:调用QQuickWindow的currentWindow静态方法,获取到当前的QQuickWindow对象;
S202:调用该QQuickWindow对象的renderInterface函数,获取到QSGRendererInterface对象;
S203:调用该QSGRendererInterface对象的graphicsApi函数,获取到当前渲染API类型。
进一步地,上述步骤S3中使用QQuickFrameBufferObject绘制视频图像的具体步骤包括:
S301:创建QuickFrameBufferObjectRender类,该QuickFrameBufferObjectRender类继承QQuickFrameBufferObject类,QuickFrameBufferObject类有一个纯虚函数createRenderer,所述createRenderer纯虚函数返回一个Renderer抽象类,所述Renderer抽象类有一个纯虚函数render;
S302:在QuickFrameBufferObjectRender类的createRenderer纯虚函数中创建FBORender类,该FBORender类继承Renderer类;
S303:调用FBORender类的render函数,并在render函数中调用OpenGL的相关API绘制视频图像。
在使用QQuickFrameBufferObject绘制视频图像时,首先要创建继承QQuickFrameBufferObject类的QuickFrameBufferObjectRender类,再创建FBORender类,进而继承并实现QQuickFrameBufferObject以及Renderer这两个抽象类,完成视频图像的绘制。
然而,FBORender类仅存在当前渲染API为OpenGL的环境中,因此,使用QQuickFrameBufferObject绘制视频图像仅适用于API为OpenGL的情形,当API不是OpenGL时,则无法完成创建FBORender类的步骤,进而无法完成视频图像的绘制。
进一步地,步骤S4中使用QuickPainterRender绘制视频图像的具体步骤包括:
S401:QuickPainterRender继承QQuickPaintedItem类,并实现QQuickPaintedItem类的paint函数,在QQuickPaintedItem类的paint函数中,创建QPainter类;
S402:构造QImage函数,在QuickPainterRender的paint函数中,分别调用IVideoFrameBuffer接口的buffer函数、width函数以及height函数,对应获取图像的像素内容、图像的宽度以及图像的高度,并将图像的像素内容、图像的宽度、图像的高度和像素格式均传入到QImage函数的参数中,完成QImage的创建;
具体过程为:通过调用IVideoFrameBuffer接口的buffer函数,获取图像的像素内容,并将图像的像素内容传入到QImage函数的第一个参数中,调用IVideoFrameBuffer接口的width函数,获取图像的宽度,并将图像的宽度传入到QImage函数的第二个参数中,调用IVideoFrameBuffer接口的height函数,获取图像的高度,并将图像的高度传入到QImage函数的第三个参数中,最后将Format_RGB32像素格式值传入到QImage函数的第四个参数中,完成QImage的创建;
S403:调用QPainter类的drawImage函数,将创建后的QImage传入到drawImage函数中,完成视频图像的绘制。
由于在PC客户端中,解码后的视频图像是以IVideoFrameBuffer接口的形式存在的,因此,在上述步骤S402中需要将IVideoFrameBuffer接口中的视频图像转换成一个QImage,然后再调用QPainter类的drawImage函数,将创建后的QImage传入到drawImage函数中,从而完成视频图像的绘制。
在本发明实施例中,由于使用QuickPainterRender绘制视频图像的效率不如使用QQuickFrameBufferObject绘制视频图像的效率高,因此,当API类型为OpenGL时,优选使用QQuickFrameBufferObject绘制视频图像来进行视频图像的绘制。
基于同一发明构思,本申请提供了实施例一对应的存储介质的实施例,详见实施例二
实施例二
对应利用Qt Quick绘制图像时防止出现白屏的方法,本发明实施例提供了一种存储介质的实施例,该存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述实施例所述的利用QtQuick绘制图像时防止出现白屏的方法的步骤,具体实现以下步骤:
创建QmlMediaDecoder类,并对其进行初始化;
在初始化QmlMediaDecoder类时,获取渲染API类型;
若获取到的API类型为OpenGL时,则利用QmlMediaDecoder类创建QQuickFrameBufferObject,并使用QQuickFrameBufferObject绘制视频图像;
若获取到的API类型不为OpenGL时,则利用QmlMediaDecoder类创建QuickPainterRender,并使用QuickPainterRender绘制视频图像。
需要说明的是,本发明实施例中使用的方法和实施例一利用QtQuick绘制图像时防止出现白屏的方法是基于同一构思的,故而基于本申请实施例一种介绍的方法,本领域的技术人员能够了解本实施例的存储介质的具体实施方式以及其各种变化形式,所以在此对于该存储介质如何实现本申请实施例中的方法以及各种优选方案不再详细介绍。
基于同一发明构思,本申请提供了实施例一对应的电子设备的实施例,详见实施例三
实施例三
对应利用Qt Quick绘制图像时防止出现白屏的方法,本发明实施例还提供了一种电子设备的实施例,包括存储器和处理器,存储器上储存有在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述实施例所述的利用Qt Quick绘制图像时防止出现白屏的方法的步骤,具体实现以下步骤:
创建QmlMediaDecoder类,并对其进行初始化;
在初始化QmlMediaDecoder类时,获取渲染API类型;
若获取到的API类型为OpenGL时,则利用QmlMediaDecoder类创建QQuickFrameBufferObject,并使用QQuickFrameBufferObject绘制视频图像;
若获取到的API类型不为OpenGL时,则利用QmlMediaDecoder类创建QuickPainterRender,并使用QuickPainterRender绘制视频图像。
需要说明的是,本发明实施例中使用的方法和实施例一利用QtQuick绘制图像时防止出现白屏的方法是基于同一构思的,故而基于本申请实施例一种介绍的方法,本领域的技术人员能够了解本实施例的存储介质的具体实施方式以及其各种变化形式,所以在此对于该存储介质如何实现本申请实施例中的方法以及各种优选方案不再详细介绍。
基于同一发明构思,本申请提供了实施例一对应的一种利用QtQuick绘制图像时防止出现白屏的系统,详见实施例四。
实施例四
本发明实施例提供了一种利用Qt Quick绘制图像时防止出现白屏的系统,包括:
创建模块,其用于创建QmlMediaDecoder类,并对其进行初始化;
获取模块,其用于在初始化QmlMediaDecoder类时,获取渲染API类型;
第一处理模块,其用于当获取到的API类型为OpenGL时,利用QmlMediaDecoder类创建QQuickFrameBufferObject,并使用QQuickFrameBufferObject绘制视频图像;
第二处理模块,其用于当获取到的API类型不为OpenGL时,利用QmlMediaDecoder类创建QuickPainterRender,并使用QuickPainterRender绘制视频图像。
进一步地,在本发明实施例中,所述获取模块具体包括:
第一获取单元,其用于调用QQuickWindow的currentWindow静态方法,获取到当前的QQuickWindow对象;
第二获取单元,其用于调用该QQuickWindow对象的renderInterface函数,获取到QSGRendererInterface对象;
第三获取单元,其用于调用该QSGRendererInterface对象的graphicsApi函数,获取到当前渲染API类型。
进一步地,在本发明实施例中,所述第一处理模块具体包括:
QuickFrameBufferObjectRender类创建单元,其用于创建QuickFrameBufferObjectRender类,该QuickFrameBufferObjectRender类继承QQuickFrameBufferObject类,QuickFrameBufferObject类有一个纯虚函数createRenderer,所述createRenderer纯虚函数返回一个Renderer抽象类,所述Renderer抽象类有一个纯虚函数render;
FBORender类创建单元,其用于在QuickFrameBufferObjectRender类的createRenderer纯虚函数中创建FBORender类,该FBORender类继承Renderer类;
第一绘制单元,其用于调用FBORender类的render函数,并在render函数中调用OpenGL的相关API绘制视频图像。
进一步地,在本发明实施例中,所述第二处理模块具体包括:
QuickPainterRender创建单元,其用于创建QuickPainterRender类,并继承QQuickPaintedItem类,且实现QQuickPaintedItem类的paint函数;
QPainter类创建单元,其用于在QQuickPaintedItem类的paint函数中,创建QPainter类;
QImage创建单元,其用于构造QImage函数,在QuickPainterRender的paint函数中,分别调用IVideoFrameBuffer接口的buffer函数、width函数以及height函数,对应获取图像的像素内容、图像的宽度以及图像的高度,并将图像的像素内容、图像的宽度、图像的高度和像素格式均传入到QImage函数的参数中,完成QImage的创建;
第二绘制单元,其用于调用QPainter类的drawImage函数,将创建后的QImage传入到drawImage函数中,完成视频图像的绘制。
在本发明实施例中,利用Qt Quick绘制图像时防止出现白屏的系统,通过获取渲染API类型,再根据API类型来选择使用不同的方法来进行视频图像的绘制,当API类型为OpenGL时,使用QQuickFrameBufferObject绘制视频图像,不仅绘制效率高,而且不会出现白屏,当API类型不为OpenGL时,使用QuickPainterRender绘制视频图像,如此,即使API类型不为OpenGL,也可以通过QuickPainterRender顺利完成视频图像的绘制,不会出现白屏,从而可以解决利用Qt Quick绘制图像时出现白屏的现象,提高PC客户端的系统兼容性。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

Claims (10)

1.一种利用Qt Quick绘制图像时防止出现白屏的方法,其特征在于,包括步骤:
创建QmlMediaDecoder类,并对其进行初始化;
在初始化QmlMediaDecoder类时,获取渲染API类型;
若获取到的API类型为OpenGL时,则利用QmlMediaDecoder类创建QQuickFrameBufferObject,并使用QQuickFrameBufferObject绘制视频图像;
若获取到的API类型不为OpenGL时,则利用QmlMediaDecoder类创建QuickPainterRender,并使用QuickPainterRender绘制视频图像。
2.如权利要求1所述的利用Qt Quick绘制图像时防止出现白屏的方法,其特征在于,获取渲染API类型的具体步骤包括:
调用QQuickWindow的currentWindow静态方法,获取到当前的QQuickWindow对象;
调用该QQuickWindow对象的renderInterface函数,获取到QSGRendererInterface对象;
调用该QSGRendererInterface对象的graphicsApi函数,获取到当前渲染API类型。
3.如权利要求1所述的利用Qt Quick绘制图像时防止出现白屏的方法,其特征在于,使用QQuickFrameBufferObject绘制视频图像的具体步骤包括:
创建QuickFrameBufferObjectRender类,该QuickFrameBufferObjectRender类继承QQuickFrameBufferObject类,QuickFrameBufferObject类有一个纯虚函数createRenderer,所述createRenderer纯虚函数返回一个Renderer抽象类,所述Renderer抽象类有一个纯虚函数render;
在QuickFrameBufferObjectRender类的createRenderer纯虚函数中创建FBORender类,该FBORender类继承Renderer类;
调用FBORender类的render函数,并在render函数中调用OpenGL的相关API绘制视频图像。
4.如权利要求1所述的利用Qt Quick绘制图像时防止出现白屏的方法,其特征在于,使用QuickPainterRender绘制视频图像的具体步骤包括:
QuickPainterRender继承QQuickPaintedItem类,并实现QQuickPaintedItem类的paint函数,在QQuickPaintedItem类的paint函数中,创建QPainter类;
构造QImage函数,在QuickPainterRender的paint函数中,分别调用IVideoFrameBuffer接口的buffer函数、width函数以及height函数,对应获取图像的像素内容、图像的宽度以及图像的高度,并将图像的像素内容、图像的宽度、图像的高度和像素格式均传入到QImage函数的参数中,完成QImage的创建;
调用QPainter类的drawImage函数,将创建后的QImage传入到drawImage函数中,完成视频图像的绘制。
5.一种存储介质,该存储介质上存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现权利要求1至4任一项所述的方法。
6.一种电子设备,包括存储器和处理器,存储器上储存有在处理器上运行的计算机程序,其特征在于:所述处理器执行所述计算机程序时实现权利要求1至4任一项所述的方法。
7.一种利用Qt Quick绘制图像时防止出现白屏的系统,其特征在于,包括:
创建模块,其用于创建QmlMediaDecoder类,并对其进行初始化;
获取模块,其用于在初始化QmlMediaDecoder类时,获取渲染API类型;
第一处理模块,其用于当获取到的API类型为OpenGL时,利用QmlMediaDecoder类创建QQuickFrameBufferObject,并使用QQuickFrameBufferObject绘制视频图像;
第二处理模块,其用于当获取到的API类型不为OpenGL时,利用QmlMediaDecoder类创建QuickPainterRender,并使用QuickPainterRender绘制视频图像。
8.如权利要求7所述的利用Qt Quick绘制图像时防止出现白屏的系统,其特征在于,所述获取模块具体包括:
第一获取单元,其用于调用QQuickWindow的currentWindow静态方法,获取到当前的QQuickWindow对象;
第二获取单元,其用于调用该QQuickWindow对象的renderInterface函数,获取到QSGRendererInterface对象;
第三获取单元,其用于调用该QSGRendererInterface对象的graphicsApi函数,获取到当前渲染API类型。
9.如权利要求7所述的利用Qt Quick绘制图像时防止出现白屏的系统,其特征在于,所述第一处理模块具体包括:
QuickFrameBufferObjectRender类创建单元,其用于创建QuickFrameBufferObjectRender类,该QuickFrameBufferObjectRender类继承QQuickFrameBufferObject类,QuickFrameBufferObject类有一个纯虚函数createRenderer,所述createRenderer纯虚函数返回一个Renderer抽象类,所述Renderer抽象类有一个纯虚函数render;
FBORender类创建单元,其用于在QuickFrameBufferObjectRender类的createRenderer纯虚函数中创建FBORender类,该FBORender类继承Renderer类;
第一绘制单元,其用于调用FBORender类的render函数,并在render函数中调用OpenGL的相关API绘制视频图像。
10.如权利要求7所述的利用Qt Quick绘制图像时防止出现白屏的系统,其特征在于,所述第二处理模块具体包括:
QuickPainterRender创建单元,其用于创建QuickPainterRender类,并继承QQuickPaintedItem类,且实现QQuickPaintedItem类的paint函数;
QPainter类创建单元,其用于在QQuickPaintedItem类的paint函数中,创建QPainter类;
QImage创建单元,其用于构造QImage函数,在QuickPainterRender的paint函数中,分别调用IVideoFrameBuffer接口的buffer函数、width函数以及height函数,对应获取图像的像素内容、图像的宽度以及图像的高度,并将图像的像素内容、图像的宽度、图像的高度和像素格式均传入到QImage函数的参数中,完成QImage的创建;
第二绘制单元,其用于调用QPainter类的drawImage函数,将创建后的QImage传入到drawImage函数中,完成视频图像的绘制。
CN201810836084.0A 2018-07-26 2018-07-26 一种利用Qt Quick绘制图像时防止出现白屏的方法及系统 Active CN110766599B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810836084.0A CN110766599B (zh) 2018-07-26 2018-07-26 一种利用Qt Quick绘制图像时防止出现白屏的方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810836084.0A CN110766599B (zh) 2018-07-26 2018-07-26 一种利用Qt Quick绘制图像时防止出现白屏的方法及系统

Publications (2)

Publication Number Publication Date
CN110766599A true CN110766599A (zh) 2020-02-07
CN110766599B CN110766599B (zh) 2023-03-28

Family

ID=69327588

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810836084.0A Active CN110766599B (zh) 2018-07-26 2018-07-26 一种利用Qt Quick绘制图像时防止出现白屏的方法及系统

Country Status (1)

Country Link
CN (1) CN110766599B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111770291A (zh) * 2020-09-02 2020-10-13 深兰人工智能芯片研究院(江苏)有限公司 一种处理方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103077026A (zh) * 2012-12-28 2013-05-01 锐达互动科技股份有限公司 一种在操作系统的桌面环境下进行书写的方法
US20150371410A1 (en) * 2012-04-27 2015-12-24 Company 100, Inc. Batch rendering method for 2d vector graphics path using gpu
CN107547474A (zh) * 2016-06-27 2018-01-05 中兴通讯股份有限公司 一种异构型双系统的图形显示方法和设备

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150371410A1 (en) * 2012-04-27 2015-12-24 Company 100, Inc. Batch rendering method for 2d vector graphics path using gpu
CN103077026A (zh) * 2012-12-28 2013-05-01 锐达互动科技股份有限公司 一种在操作系统的桌面环境下进行书写的方法
CN107547474A (zh) * 2016-06-27 2018-01-05 中兴通讯股份有限公司 一种异构型双系统的图形显示方法和设备

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
CSDN: "https://blog.csdn.net/l523010415/article/details/80218436", 《HTTPS://BLOG.CSDN.NET/L523010415/ARTICLE/DETAILS/80218436》 *
QT: "Introducing the Qt Quick 2D Renderer", 《HTTPS://WWW.QT.IO/BLOG/2015/01/22/INTRODUCING-THE-QT-QUICK-2D-RENDERER》 *
徐春晓等: "一种嵌入式轻量级GUI构件的实现方法", 《苏州大学学报(工科版)》 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111770291A (zh) * 2020-09-02 2020-10-13 深兰人工智能芯片研究院(江苏)有限公司 一种处理方法及装置

Also Published As

Publication number Publication date
CN110766599B (zh) 2023-03-28

Similar Documents

Publication Publication Date Title
CN110377264B (zh) 图层合成方法、装置、电子设备及存储介质
CN108939556B (zh) 一种基于游戏平台的截图方法及装置
CN110989878B (zh) 小程序中的动画展示方法、装置、电子设备及存储介质
JP2019512749A (ja) アプリケーションプログラム処理方法及び端末デバイス
WO2017032233A1 (zh) 一种图像生成方法及装置
JP2006238429A (ja) ハードウエア・アクセラレーティド・ブレンド・モード
EP3822757A1 (en) Method and apparatus for setting background of ui control
KR20170040698A (ko) 그래픽스 파이프라인을 수행하는 방법 및 장치
KR20210030384A (ko) 3d 전환
WO2015037169A1 (ja) 描画装置
CN112734896A (zh) 环境遮蔽渲染方法、装置、存储介质及电子设备
CN115546410A (zh) 窗口展示方法、装置、电子设备及存储介质
US20180253886A1 (en) Texturing of a three-dimensional (3d) model by uv map in-painting
WO2018127364A1 (en) Method and device for applying an effect of an augmented or mixed reality application
CN110766599B (zh) 一种利用Qt Quick绘制图像时防止出现白屏的方法及系统
CN112188087B (zh) 一种全景视频的截图方法、装置、存储介质和计算机设备
US10067914B2 (en) Techniques for blending document objects
TWI566205B (zh) 圖形驅動程式在顯像圖框中近似動態模糊的方法
CN109859328B (zh) 一种场景切换方法、装置、设备和介质
US10306184B1 (en) Masking video feedback loop during screen sharing
CN115311397A (zh) 用于图像渲染的方法、装置、设备和存储介质
KR20160143936A (ko) 선택적 3d 렌더링 방법 및 이를 위한 시스템
CN112929682B (zh) 对图像背景进行透明处理的方法、装置、系统及电子设备
US11748911B2 (en) Shader function based pixel count determination
CN111292392A (zh) 基于unity的图像显示方法、装置、设备及介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant