QtQuickを使用すると、RGBで定義された既存の色を使用し、Javascriptに依存せずに不飽和化できますか?宣言的なQMLでRGBで定義された色を非飽和化する方法
0
A
答えて
1
QtQuickがJavascriptエンジン上でどのように動作するのかを見て、何もをJavascriptに頼らずに実行することはできません。
彩度を調整するには、RGBをHSLカラーに変換してからRGBに戻す必要があります。 QMLは、後者のためにQt.hsla()
がありますが、私がチェックした最後の時間は、それはHSLにRGBからの変換を提供しなかったので、私はこれを使用して終了:
function rgbToHsl(r, g, b) {
r /= 255
g /= 255
b /= 255
var max = Math.max(r, g, b), min = Math.min(r, g, b)
var h, s, l = (max + min)/2
if (max == min) {
h = s = 0
} else {
var d = max - min
s = l > 0.5 ? d/(2 - max - min) : d/(max + min)
switch (max) {
case r:
h = (g - b)/d + (g < b ? 6 : 0)
break
case g:
h = (b - r)/d + 2
break
case b:
h = (r - g)/d + 4
break
}
h /= 6;
}
return {"h":h, "s":s, "l":l};
}
だから基本的には:
var ic = yourRGBColor.toString()
var r = parseInt(ic.substr(1, 2), 16)
var g = parseInt(ic.substr(3, 2), 16)
var b = parseInt(ic.substr(5, 2), 16)
var hsl = rgbToHsl(r, g, b)
hsl.s *= .5 // desaturate 50%
yourRGBColor = Qt.hsla(hsl.h, hsl.s, hsl.l, 1)
1
function desaturate(colorString)
{
var c = Qt.darker(colorString, 1.0);
return Qt.hsla(c.hslHue, 0.0, c.hslLightness, c.a);
}
1
color modelに応じて、色のhsvSaturation
、またはhslSaturation
のプロパティを変更するだけです。
例徐々に毎秒青色の長方形を脱飽和(qmlscene Test.qml
で実行)Test.qml
:コードのテキストの多くに隠さ
import QtQuick 2.7
Item {
width: 100
height: 100
Rectangle {
anchors.fill: parent
objectName: "precious"
color: "#0000FF"
Timer {
running: true
repeat: true
onTriggered: parent.color.hslSaturation *= 0.8;
}
}
}
、両者のブロックは、これらの特性は実際
color QML Basic Typeに記載されています。これらは、C++の
qreal
バージョンのカラーコンポーネントプロパティ(対応名は
...F()
)に対応しています。
@dtechの状態では、onTriggered:...
は合法的に既にJavaScriptの行です。必要がある場合は、C++でその行を見て、要素の属性を見つけてそこのプロパティを変更することもできます。
#include <QGuiApplication>
#include <QQuickView>
#include <QQuickItem>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQuickView view(QUrl(QLatin1String("qrc:/Test.qml")));
view.show();
if (QObject * rectangle = view.rootObject()->findChild<QObject*>("precious"))
{
qreal h, s, l, a;
rectangle->property("color").value<QColor>().getHslF(&h, &s, &l, &a);
s *= 0.2;
rectangle->setProperty("color", QVariant::fromValue(QColor::fromHsvF(h, s, l, a)));
}
return app.exec();
}
:徐々にそれは(まだQML/JavaScriptで行わ)脱飽和、(純粋にC++で)既に非常に脱飽和で始まること、青い四角形を上記
Test.qml
を示す
例main.cpp
、
JavaScriptの見かけ上の行をTest.qml
から削除できました。
非常に粗いカラーアニメーションを示しています。より良いやり方をする特別なColorAnimation
ツールがあります。
関連する問題
- 1. 色を不飽和化する方法は?
- 2. 関数スコープで定義された構造体を宣言する方法は?
- 3. 不正な引数の例外 - メソッドで定義された静的変数を宣言する方法
- 4. -webkit-変換不飽和化テキストの影
- 5. 宣言的にインスタンス化されたdojoインスタンスを取得する方法は?
- 6. CPUを飽和させるプログラムの簡単な考え方
- 7. joblibとパラレル化する - パフォーマンスの飽和と一般的な考慮事項
- 8. タイプスクリプト宣言ファイルでシングルトンのjavascriptクラスを定義する方法
- 9. ルールファイル内で宣言された型のメソッドの定義
- 10. 解決を含むコンフリクト(再定義)または宣言されたメンバーを選択的に含める方法
- 11. 別の関数のある関数で定義され、宣言された変数にアクセスする方法は?
- 12. 人形の宣言的な言葉「定義するためのMetaparameterの購読ルールを定義する」
- 13. pixastic-jqueryを使用した不飽和化
- 14. androidの飽和値を調整する方法
- 15. object.definePropertyで定義されたmodule.exportsを文書化する方法
- 16. 定義されたivarを作成するObjective-C宣言されたプロパティ?
- 17. SQLAlchemy宣言的な1対多の定義されていないエラー
- 18. Eclipse、ライブラリで定義されているオープン宣言
- 19. クラスで宣言されているが未定義のメソッド
- 20. Angular2でネストされたコンポーネントを宣言する方法
- 21. mapped-superclassで宣言された@GeneratedValueをオーバーライドする方法は?
- 22. ウィンドウ関数による飽和和を設計する
- 23. 特定の親クラスで宣言されたメソッドを取得する方法は?
- 24. SQL Serverで宣言された変数に値を設定する方法
- 25. mavenのプロパティセットで宣言されたプロパティのクラスパスを設定する方法
- 26. (kendo)宣言グリッド定義でdata-columnsフィールド型を指定する方法
- 27. javascriptで宣言された変数に到達する方法
- 28. WPF - App.xaml.csで宣言されたメソッドにアクセスする方法?
- 29. node.jsサーバファイルで宣言された配列にアクセスする方法
- 30. Dojo:オプションで宣言的に選択可能なウィジェットを定義する
画面上で何かを彩度を上げたい場合は、http://doc.qt.io/qt-5/qml-qtgraphicaleffects-desaturate.htmlを使用できます。 – GrecKo