用QRadialGradient 实现高斯灰度扩散的点

本文介绍了如何在Qt中利用QRadialGradient和QBrush类结合,根据高斯分布特性创建径向渐变,以半径为变量绘制具有不同灰度层次的像素点。
摘要由CSDN通过智能技术生成

使用Qt绘制一个高斯灰度扩散的点。唯一的变量是点的半径。

QRadialGradient类与QBrush类结合使用来指定径向梯度刷。QRadialGradient类构造参数如下:

// 三个参数分别为中心点,半径,焦点
QRadialGradient(const QPointF &center, qreal radius, const QPointF &focalPoint)

根据高斯分布曲线性质:
在这里插入图片描述

1σ 时 能量为极大值的 e^(-1/2) = 0.607,(μ-σ, μ+σ) 包含68.3%能量
2σ 时 能量为极大值的 e^(-2) = 0.135,(μ-2σ, μ+2σ) 包含95.4%能量
3σ 时 能量为极大值的 e^(-9/2),近似为0,(μ-3σ, μ+3σ) 包含99.7%能量

绘制点的函数如下:

    self._data_img = QImage(self._img_width,
                            self._img_hight, QImage.Format_Alpha8)
...
    def drawDataPoint(self, pt):
        """ Update heat image with point data
        """
        painter = QPainter(self._data_img) # paint on QImage
        painter.setPen(Qt.transparent)

        radial = QRadialGradient(pt, self._radius, pt)  # 中心点=焦点
        radial.setColorAt(0, QColor(0, 0, 0, 255)) # 0  -> 极大值,纯黑色
        radial.setColorAt(0.333, QColor(0, 0, 0, 155)) # σ  -> 0.607 * 255 = 155
        radial.setColorAt(0.666, QColor(0, 0, 0, 35)) # 2σ -> 0.135 * 255 = 35
        radial.setColorAt(1, QColor(0, 0, 0, 0)) # 3σ -> 0 完全透明的黑色,即无色
        painter.setBrush(radial)
        painter.drawEllipse(pt, self._radius, self._radius)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
QRadialGradientQt中的一个类,用于创建径向渐变效果。它可以在一个圆形区域内从一个颜色渐变到另一个颜色。\[1\]在Qt中,可以通过设置中心、半径和颜色来定义QRadialGradient。\[1\]例如,在Qt的paintEvent函数中,可以使用QRadialGradient来创建一个辐射渐变的效果。\[1\]另外,也可以通过在Qt样式表中使用qradialgradient属性来实现径向渐变的效果。\[2\]总的来说,QRadialGradient是一种用于创建圆形渐变效果的工具,可以在Qt中使用。 #### 引用[.reference_title] - *1* [QT中的渐变填充类QGradient](https://blog.csdn.net/qq_38211856/article/details/111463571)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [QT样式表之径向渐变(qradialgradient)](https://blog.csdn.net/jolin678/article/details/118249643)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Qt支持3种渐变](https://blog.csdn.net/liuying263/article/details/127265469)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值