前言

用 QML 做图片倒影,主要是用ShaderEffect组件来实现,先来看看实际效果,如下:


还可以用同样的方式来做其他控件的倒影,例如:

正文

直接来看源码

import QtQuick 2.0
import QtQuick.Controls 1.4Rectangle {id: windowwidth: 600height: 500gradient: Gradient {GradientStop { position: 0; color: "lightsteelblue" }GradientStop { position: 1; color: "black" }}Image {id: imgwidth: 300height: 170source: "car.png"anchors.centerIn: parent}ShaderEffect {anchors.top: img.bottomwidth: img.widthheight: img.heightanchors.left: img.leftproperty variant source: imgproperty size sourceSize: Qt.size(0.5 / img.width, 0.5 / img.height)fragmentShader: "varying highp vec2 qt_TexCoord0;uniform lowp sampler2D source;uniform lowp vec2 sourceSize;uniform lowp float qt_Opacity;void main() {lowp vec2 tc = qt_TexCoord0 * vec2(1, -1) + vec2(0, 1);lowp vec4 col = 0.25 * (texture2D(source, tc + sourceSize)+ texture2D(source, tc- sourceSize)+ texture2D(source, tc + sourceSize * vec2(1, -1))+ texture2D(source, tc + sourceSize * vec2(-1, 1)));gl_FragColor = col * qt_Opacity * (1.0 - qt_TexCoord0.y) * 0.2;}"}
}

若要拓展做其他控件的倒影,只需要修改property variant source: img 对象即可.

还有一种比较简单的容易理解的方式来实现同样的效果

import QtQuick 2.0
import QtQuick.Controls 1.4Rectangle {id: windowwidth: 600height: 500gradient: Gradient {GradientStop { position: 0; color: "lightsteelblue" }GradientStop { position: 1; color: "black" }}Image {id: imgwidth: 300height: 170source: "car.png"anchors.centerIn: parent}Item{width: img.widthheight: img.heightImage{source: img.sourceanchors.fill: parenttransform: Scale{yScale: -1origin.y:img.height/2.}}LinearGradient{width: img.widthheight: img.heightgradient: Gradient{GradientStop{position: 0.0;color:Qt.rgba(0,0,0,0.1)}GradientStop{position: 0.4;color:Qt.rgba(0,0,0,1)}}}}
}

原理是先通过设置一张倒着的图片,然后在图片上添加一个渐变层,代码很简单,不再赘述。

QML做图片倒影效果(控件倒影)相关推荐

  1. QT如何实现控件倒影特效

    QT如何实现控件倒影特效 想要为某些控件不只是图片加倒影特效,例如: 这样: 例如: 这样: 于是,在我的潜心研究之下,终于找到了两种实现方法: (一)使用QT的QGraphicsEffect类 QG ...

  2. 图片剪裁控件——ClipImageView

    这段时间在做自己的项目时,须要使用到图片剪裁功能,当时大概的思考了一些需求.想到了比較简单的实现方法.因此就抽了点时间做了这个图片剪裁控件--ClipImageView 这里先贴上ClipImageV ...

  3. Android微信九宫格图片展示控件

    版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/214 Android微信九宫格图片展示控件 半年前,公司产 ...

  4. Android开发技巧——定制仿微信图片裁剪控件

    拍照--裁剪,或者是选择图片--裁剪,是我们设置头像或上传图片时经常需要的一组操作.上篇讲了Camera的使用,这篇讲一下我对图片裁剪的实现. 背景 下面的需求都来自产品. 裁剪图片要像微信那样,拖动 ...

  5. 第一站小红书图片裁剪控件,深度解析大厂炫酷控件

    先来看两张效果图: 哈哈,就是这样了.效果差了一些,感兴趣的小伙伴们可以运行代码感受丝滑与弹性.前段时间在竞品小红书上看到了这样的效果:图片可以跟随手指移动,双指可以(无限)放大,缩小,还可以挤压,手 ...

  6. CropImageView android上的一个图片裁剪控件

    CropImageView **文前:**本文非常容易让读者看的云里雾里,建议直接看效果图,觉得有用就去看源码吧. CropImageView的原型来自Cropimage_demo,是android上 ...

  7. 第一站小红书图片裁剪控件之二,自定义CoordinatorLayout联动效果

    本篇续: 第一站小红书图片裁剪控件,深度解析大厂炫酷控件 先来看看几张效果图: emmmm,想感受高清丝滑的动画效果,有以下两种方式: https://github.com/HpWens/MeiWid ...

  8. 像小红书一样的图片裁剪控件联动效果

    今日科技快讯 据CNBC报道,美国法官已经要求特斯拉首席执行官埃隆·马斯克(Elon Musk)在未来两周内设法与美国证券交易委员会(SEC)达成和解协议.否则,法院将决定是否判马斯克犯有藐视法庭罪. ...

  9. 第一站仿小红书图片裁剪控件,深度解析大厂炫酷控件

    先来看两张效果图: 哈哈,就是这样了.效果差了一些,感兴趣的小伙伴们可以运行代码感受丝滑与弹性.前段时间在竞品小红书上看到了这样的效果:图片可以跟随手指移动,双指可以(无限)放大,缩小,还可以挤压,手 ...

最新文章

  1. 高低压配电系统基础知识,都是非常全面的分享!
  2. Handle/Body pattern(Wrapper pattern)
  3. 程序设计语言基础-知识点
  4. IplImage, CvMat, Mat 的关系和相互转换(转)
  5. 色彩空间(CIE色度图,SRGB,AdobeRGB...)
  6. 易语言 火眼 哈勃 防分析源码
  7. origin拟合曲线,并绘制曲线上某一点的切线
  8. HTML 命名规范说明
  9. 如何使用Hulu观看晚会与朋友一起看电视
  10. wuauclt.exe windows 自动更新测试命令
  11. NISP网络信息安全面试怎么选择(六)NISP管理中心
  12. PreRNN+:Towards A Resolution of the Deep-in-Dilemma in Saptiotemporal Predictive Learning
  13. 教你关闭烦人的“程序兼容性助手”~~~~~
  14. 主力吸筹猛攻指标源码_通达信最准确的抄底指标——主力吸筹(无未来附源码)...
  15. 【解决方法】Win10还原默认打开方式图标
  16. Eclipse配置Python的IDE
  17. android 携程页面,android 仿携程首页源码(自定义button)
  18. 【Java面试】什么是字节码?采用字节码的好处是什么?
  19. 仿淘宝关闭二维码案例
  20. setTimeout 的黑魔法

热门文章

  1. 谁在为网易云音乐2亿用户的即时通讯保驾护航?
  2. LightCounting预测以太网光模块市场未来5年18%增速
  3. 【mysql】[error]group_concat造成的sql语法错误
  4. Linux驱动 - 多线程之 完成量
  5. android之PackageManager简单介绍
  6. HDU 1828 Picture 线段树 扫描线
  7. 学习python之序言
  8. IBM X3650 WIN2003安装详细方法
  9. Google邮局可以实时开通了
  10. deepin v20.2.4设置全局搜索的快捷键