QML 颜色效果

亮度与对比度调整(BrightnessContrast)

BrightnessContrast效果允许开发者调整元素的亮度和对比度,是图像处理中最基础也最常用的效果之一。

核心属性

属性类型默认值描述
sourcevariant必需应用效果的源项
brightnessreal0.0亮度调整值(-1.0到1.0)
contrastreal0.0对比度调整值(-1.0到1.0)
cachedboolfalse是否缓存效果输出以提升性能

brightness属性控制图像的明暗程度:正值增加亮度,负值降低亮度。​contrast属性控制图像对比度:正值增加对比度,负值降低对比度。

应用示例

基础亮度调整:​

import QtQuick 2.15
import QtGraphicalEffects 1.15

Image {
    id: sourceImage
    source: "image.png"
    visible: false
}

BrightnessContrast {
    anchors.fill: sourceImage
    source: sourceImage
    brightness: 0.5 // 提高亮度
    contrast: 0.1 // 轻微增加对比度
}

动态亮度对比度调整(可用于图片编辑应用):​

Row {
    spacing: 20
    
    Slider {
        id: brightnessSlider
        width: 200
        from: -1.0
        to: 1.0
        value: 0.0
    }
    
    Slider {
        id: contrastSlider
        width: 200
        from: -1.0
        to: 1.0
        value: 0.0
    }
    
    BrightnessContrast {
        source: sourceImage
        brightness: brightnessSlider.value
        contrast: contrastSlider.value
    }
}

BrightnessContrast效果特别适合用于:

  • 图像编辑应用中的亮度/对比度调整功能
  • 根据环境光线自动调整界面明暗
  • 创建特殊视觉效果(如夜间模式)
  • 修正曝光不足或过度的图片

颜色叠加(ColorOverlay)

ColorOverlay效果可以在源项上叠加一层指定的颜色,实现类似滤镜的效果,是UI设计中常用的技术。

核心属性

属性类型默认值描述
sourcevariant必需应用效果的源项
colorcolor"white"叠加的颜色值
cachedboolfalse是否缓存效果输出

color属性支持所有QML颜色表示法,包括颜色名称、十六进制、RGB、HSL等。通过alpha通道可以控制叠加的强度。

应用示例

基础颜色叠加:​

import QtQuick 2.15
import QtGraphicalEffects 1.15

Image {
    id: originalImage
    source: "icon.png"
    visible: false
}

ColorOverlay {
    anchors.fill: originalImage
    source: originalImage
    color: "#8000ff00" // 半透明绿色叠加
}

按钮状态颜色变化:​

Button {
    id: myButton
    text: "Submit"
    width: 120
    height: 40
}

ColorOverlay {
    anchors.fill: myButton
    source: myButton
    color: myButton.down ? "#60ff0000" : "#6000ff00"
}

多图统一色调(适用于图标集):​

Grid {
    columns: 3
    spacing: 10
    
    Repeater {
        model: 6
        delegate: ColorOverlay {
            width: 48; height: 48
            source: Image { source: "icon" + index + ".png"; visible: false }
            color: "#3498db" // 统一蓝色调
        }
    }
}

ColorOverlay常用于:

  • 为图标集应用统一品牌色
  • 实现按钮的按下状态效果
  • 创建彩色图标变体
  • 图像着色而不修改原始资源

着色效果(Colorize)

Colorize效果可以将图像转换为单色调图像,同时保留原始图像的亮度和细节。

核心属性

属性类型默认值描述
sourcevariant必需应用效果的源项
huereal0.0色调值(0.0-1.0)
saturationreal1.0饱和度值(0.0-1.0)
lightnessreal0.0亮度调整(-1.0到1.0)
cachedboolfalse是否缓存效果输出

hue属性使用HSL色彩空间的色调值,0.0和1.0都表示红色,中间值表示其他色调。​saturation控制颜色强度,0.0为灰度,1.0为完全饱和。

应用示例

基础着色效果:​

import QtQuick 2.15
import QtGraphicalEffects 1.15

Image {
    id: sourceImage
    source: "portrait.jpg"
    visible: false
}

Colorize {
    anchors.fill: sourceImage
    source: sourceImage
    hue: 0.6 // 蓝色调
    saturation: 0.8
    lightness: -0.1
}

动态色调选择器:​

Column {
    Slider {
        id: hueSlider
        width: 200
        from: 0.0
        to: 1.0
        value: 0.0
    }
    
    Colorize {
        source: sourceImage
        hue: hueSlider.value
        saturation: 1.0
    }
}

复古照片效果:​

Colorize {
    source: oldPhoto
    hue: 0.1 // 棕色调
    saturation: 0.5
    lightness: -0.2
}

Colorize效果适合用于:

  • 创建单色调风格UI
  • 实现主题颜色切换
  • 照片艺术效果处理
  • 产品图片颜色变体展示

饱和度调整(Desaturate)

Desaturate效果可以降低图像的饱和度,创建灰度或部分去色的效果。

核心属性

属性类型默认值描述
sourcevariant必需应用效果的源项
desaturationreal0.0去色程度(0.0-1.0)
cachedboolfalse是否缓存效果输出

desaturation值为0.0时保持原色,1.0时完全去色变为灰度图像。

应用示例

基础去色效果:​

import QtQuick 2.15
import QtGraphicalEffects 1.15

Image {
    id: colorfulImage
    source: "landscape.jpg"
    visible: false
}

Desaturate {
    anchors.fill: colorfulImage
    source: colorfulImage
    desaturation: 0.8 // 80%去色
}

禁用状态效果:​

Button {
    id: btn
    text: "Disabled"
    enabled: false
}

Desaturate {
    anchors.fill: btn
    source: btn
    desaturation: btn.enabled ? 0.0 : 1.0
}

​Desaturate常用于:

  • 创建禁用状态UI效果
  • 设计焦点/非焦点状态转换
  • 实现艺术化图像效果
  • 突出显示选中项(通过降低非选中项饱和度)

伽玛调整(GammaAdjust)

GammaAdjust效果通过伽玛曲线调整图像亮度,能够更自然地调整图像明暗。

核心属性

属性类型默认值描述
sourcevariant必需应用效果的源项
gammareal1.0伽玛值(大于0的值)
cachedboolfalse是否缓存效果输出

gamma值小于1.0会使图像变亮,大于1.0会使图像变暗。与Brightness不同,Gamma调整更符合人眼对光线的感知。

应用示例

基础伽玛调整:​

import QtQuick 2.15
import QtGraphicalEffects 1.15

Image {
    id: srcImage
    source: "photo.jpg"
    visible: false
}

GammaAdjust {
    anchors.fill: srcImage
    source: srcImage
    gamma: 1.8 // 变暗
}

​GammaAdjust适合用于:

  • 显示设备色彩校正
  • 适应不同光照条件下的显示
  • 照片后期处理
  • HDR效果实现

色相与饱和度调整(HueSaturation)

HueSaturation效果允许独立调整图像的色相、饱和度和亮度,提供更灵活的颜色控制。

核心属性

属性类型默认值描述
sourcevariant必需应用效果的源项
huereal0.0色相调整(-1.0到1.0,对应-180°到180°)
saturationreal0.0饱和度调整(-1.0到1.0)
lightnessreal0.0亮度调整(-1.0到1.0)
cachedboolfalse是否缓存效果输出

hue属性调整色相,​saturation调整颜色强度,​lightness调整明暗。

应用示例

基础色相旋转:​

import QtQuick 2.15
import QtGraphicalEffects 1.15

Image {
    id: origImage
    source: "object.png"
    visible: false
}

HueSaturation {
    anchors.fill: origImage
    source: origImage
    hue: 0.5 // 90°色相旋转
    saturation: 0.2
}

HueSaturation效果适合用于:

  • 图像编辑应用中的HSL调整
  • 主题颜色动态变化
  • 艺术效果创作
  • 产品多配色展示

色阶调整(LevelAdjust)

LevelAdjust效果提供专业的色阶调整功能,可以分别调整图像的最小输入/输出、中点和最大输入/输出值。

核心属性

属性类型默认值描述
sourcevariant必需应用效果的源项
minimumInputcolor"#00000000"最小输入色阶
maximumInputcolor"#ffffffff"最大输入色阶
minimumOutputcolor"#00000000"最小输出色阶
maximumOutputcolor"#ffffffff"最大输出色阶
cachedboolfalse是否缓存效果输出

这些属性允许对图像进行专业的色阶调整,类似于Photoshop中的色阶功能。

应用示例

基础色阶调整:​

import QtQuick 2.15
import QtGraphicalEffects 1.15

Image {
    id: inputImage
    source: "photo.jpg"
    visible: false
}

LevelAdjust {
    anchors.fill: inputImage
    source: inputImage
    minimumInput: "#000000" // 黑点
    maximumInput: "#ffffff" // 白点
    minimumOutput: "#111111" // 提升黑点
    maximumOutput: "#eeeeee" // 降低白点
}

对比度增强:​

LevelAdjust {
    source: lowContrastImage
    minimumInput: "#222222"
    maximumInput: "#dddddd"
    minimumOutput: "#000000"
    maximumOutput: "#ffffff"
}

LevelAdjust适合用于:

  • 专业图像处理应用
  • 照片后期调整
  • 对比度优化
  • 通道独立颜色校正

综合应用与性能优化

效果组合

性能优化建议

  1. 合理使用缓存​:对于静态内容,启用cached属性可以提高性能
  2. 控制效果范围​:通过设置适当的widthheight限制效果区域
  3. 采样数权衡​:如Glow效果中的samples属性,值越高效果越好但性能越低
  4. 动态效果优化​:对动态效果使用Behavior和动画,避免频繁重绘
  5. 效果可见性​:不需要时设置visible: false禁用效果

平台注意事项

不同平台对图形效果的支持可能有差异:

  • 移动设备上复杂的组合效果可能影响性能
  • 某些效果在OpenGL后端和软件渲染器上表现不同
  • 测试不同设备上的视觉效果和性能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值