qt5控制台应用程序的Gamma校正

qt5控制台应用程序的Gamma校正,qt,qml,qtquick2,Qt,Qml,Qtquick2,下面的代码是Qt文档中的示例,它基本上解释了如何将属性gamma调整为特定的项 import QtQuick 2.0 import QtGraphicalEffects 1.0 Item { width: 300 height: 300 Image { id: bug source: "images/bug.jpg" sourceSize: Qt.size(parent.width, parent.height)

下面的代码是Qt文档中的示例,它基本上解释了如何将属性gamma调整为特定的

import QtQuick 2.0
import QtGraphicalEffects 1.0

Item {
    width: 300
    height: 300

    Image {
        id: bug
        source: "images/bug.jpg"
        sourceSize: Qt.size(parent.width, parent.height)
        smooth: true
        visible: false
    }

    GammaAdjust {
        anchors.fill: bug
        source: bug
        gamma: 0.45
    }
}
是否有一种方法可以将gamma校正作为一个整体设置到完整的应用程序中,以便颜色深度可以按照我希望的方式进行校正,而不是默认值

类似于此:

xrandr——输出DVI-0——伽马2:2:1


使用属性绑定。创建Settings.qml

Item
{
    property double gammaValue: 0.45
}
然后

Item {
    width: 300
    height: 300

    Image {
        id: bug
        source: "images/bug.jpg"
        sourceSize: Qt.size(parent.width, parent.height)
        smooth: true
        visible: false
    }

    GammaAdjust {
        anchors.fill: bug
        source: bug
        gamma: appSettings.gammaValue
    }

    Settings {
        id: appSettings
    }
}

如果我正确理解了您的要求,那么您希望访问命令行参数。在QML中,您可以通过
Qt.application.arguments
访问它们。下面是一个粗略的解决方案,修改为您的问题代码:

import QtQuick 2.0
import QtGraphicalEffects 1.0

Item {
    width: 300
    height: 300

    // gammaIndex will be 0 if --gamma not given, otherwise index of value    
    property int gammaIndex: Qt.application.arguments.indexOf("--gamma") + 1;

    // fallback default value as its own property for clarity
    property real defaultGamma: 1.0

    // rely on short-circuiting logic, result is either //valid or //default
    // an invalid number will give value 0, so --gamma 0 is rejected too
    property real gamma: gammaIndex > 0
                         && Qt.application.arguments[gammaIndex] > 0
                         && Qt.application.arguments[gammaIndex] //valid
                         || defaultGamma //default

    Image {
        id: bug
        source: "images/bug.jpg"
        sourceSize: Qt.size(parent.width, parent.height)
        smooth: true
        visible: false
    }

    GammaAdjust {
        anchors.fill: bug
        source: bug
        gamma: parent.gamma
    }
}

根据定义,“控制台应用程序”没有GUI,也不真正关心gamma(除非它是用于调整OS gamma内容的工具,如
xrandr
)。我的意思是,你可能想编辑问题的标题,它现在相当混乱。你的意思是“如何将控制台应用程序写入GUI应用程序的adust gamma?”@hyde是的,我的意思是正在开发一个包含多个qml文件的GUI应用程序,每个文件执行特定的任务。如果我想为一个完整的GUI应用程序调整gamma,有没有一种方法可以在启动GUI应用程序时设置一些标志或类似的东西。目前,我需要在每个qml文件中添加
GammaAdjust
,我希望在其中应用该效果。@海德Gamma校正与颜色相关,控制台应用程序不排除输出颜色,甚至图形,还有一些欺骗,比如修改字符图示符。@user12345所以您实际上是在问这个问题:“如何读取命令行参数并将其用作QML代码中的gamma校正值?”@user1095108但控制台应用程序被排除在问题中显示的QML GUI之外(因为如果它们确实具有该参数,则它们不是控制台应用程序)。