【學Rust寫CAD】36 顏色插值函數(alpha256.rs補充方法)

源碼

pub fn alpha_lerp(self,src: Argb, dst: Argb, clip: u32) -> Argb {self.alpha_mul_256(clip).lerp(src, dst)}

這個函數 alpha_lerp 是一個顏色插值(線性插值,lerp)函數,它結合了透明度混合(alpha_mul_256)和顏色插值(lerp),用于計算兩個顏色 src 和 dst 的混合結果,其中混合比例由 self(透明度)和 clip(裁剪值)共同決定。

參數:
  • self:一個 Alpha256 類型的值,表示透明度 alpha256,范圍是 [0, 256]。

  • src:源顏色,類型為 Argb(通常表示帶 Alpha 通道的 RGBA 顏色)。

  • dst:目標顏色,類型為 Argb。

  • clip:一個 u32 值,用于調整混合比例,范圍是 [0, 255] 。

返回值:
  • 返回一個 Argb,表示混合后的顏色值。

計算步驟:

  1. self.alpha_mul_256(clip):
  • 調用 alpha_mul_256 方法,計算 (clip * alpha256) / 255,得到一個 Alpha256 類型的混合比例。

  • 這個比例用于后續的顏色插值。

  1. .lerp(src, dst):
  • 使用上一步計算的比例,對 src 和 dst 進行線性插值(lerp)。

  • lerp 的公式通常是 src * (1 - t) + dst * t,其中 t 是混合比例(Alpha256 的值歸一化到 [0, 1])。

作用:
  • 這個函數主要用于顏色混合,例如:

    • 在圖形渲染中,將一個半透明的顏色 src 疊加到背景顏色 dst 上。

    • 在 UI 繪制中,實現漸變或淡入淡出效果。

  • clip 參數可以進一步控制混合比例(例如,用于裁剪效果)。

  • self 用于遮罩效果

示例:

假設:

  • self.0 = 128(alpha256 = 128,半透明)。

  • clip = 255(最大值)。

  • src = Argb(0xFFFF0000)(紅色,完全不透明)。

  • dst = Argb(0xFF0000FF)(藍色,完全不透明)。

計算過程:

  1. alpha_mul_256(255):
  • prod = 255 * 128 = 32640。

  • (prod + (prod >> 8)) >> 8 = (32640 + 127) >> 8 = 32767 >> 8 = 127。

  • 返回 Alpha256(127)(即 t ≈ 127 / 256 ≈ 0.496)。

  1. lerp(src, dst):
  • 對 src 和 dst 的每個通道(A、R、G、B)進行插值:

    • 紅色通道:0xFF * (1 - 0.496) + 0x00 * 0.496 ≈ 0x80。
  • 藍色通道:0x00 * (1 - 0.496) + 0xFF * 0.496 ≈ 0x80。

  • 最終混合顏色可能是 Argb(0xFF808080)(灰色)。

總結:

alpha_lerp 是一個高效的透明度混合函數,結合了 alpha_mul_256 和 lerp,適用于圖形渲染、顏色混合等場景。它通過整數運算避免了浮點計算,同時保持較高的精度。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/900548.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/900548.shtml
英文地址,請注明出處:http://en.pswp.cn/news/900548.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解決Ubuntu系統鼠標不流暢的問題

電腦是聯想的臺式組裝機,安裝ubuntu系統(不管是16、18、20、22)后,鼠標都不流暢。最近幾天想解決這個問題,于是懷疑到了顯卡驅動上。懷疑之前一直用的是集成顯卡,而不是獨立顯卡,畢竟2060的顯卡…

oracle asm 相關命令和查詢視圖

有關asm磁盤的命令 添加磁盤 alter diskgroup data1 add disk /devices/diska*;---runs with a rebalance power of 5 , and dose not return until the rebalance operation is completealter diskgroup data1 add disk /devices/diskd* rebalance power 5 wait;查詢 select …

C++基于rapidjson的Json與結構體互相轉換

簡介 使用rapidjson庫進行封裝,實現了使用C對結構體數據和json字符串進行互相轉換的功能。最短只需要使用兩行代碼即可無痛完成結構體數據轉換為Json字符串。 支持std::string、數組、POD數據(int,float,double等)、std::vector、嵌套結構體…

Python爬蟲HTTP代理使用教程:突破反爬的實戰指南

目錄 一、代理原理:給爬蟲穿上"隱身衣" 二、代理類型選擇指南 三、代碼實戰:三行代碼實現代理設置 四、代理池管理:打造智能IP倉庫 代理驗證機制 動態切換策略 自動重試裝飾器 五、反反爬對抗技巧 請求頭偽裝 訪問頻率控…

STM32江科大----IIC

聲明:本人跟隨b站江科大學習,本文章是觀看完視頻后的一些個人總結和經驗分享,也同時為了方便日后的復習,如果有錯誤請各位大佬指出,如果對你有幫助可以點個贊小小鼓勵一下,本文章建議配合原視頻使用?? 如…

使用 React 和 Konva 實現一個在線畫板組件

文章目錄 一、前言二、Konva.js 介紹三、創建 React 畫板項目3.1 安裝依賴3.2 創建 CanvasBoard 組件 四、增加畫布控制功能4.1 清空畫布4.2 撤銷 & 重做功能 五、增加顏色和畫筆大小選擇5.1 選擇顏色5.2 選擇畫筆大小 六、最終效果七、總結 一、前言 在線畫板是許多應用&…

服務器配置虛擬IP

服務器配置虛擬IP的核心步驟取決于具體場景,主要包括本地單機多IP配置和高可用集群下的虛擬IP管理兩種模式。? 一、本地虛擬IP配置(單服務器多IP) ?基于Linux系統?: ?確認網絡接口?:使用 ip addr 或 ifconfig 查…

C++ —— 文件操作(流式操作)

C —— 文件操作(流式操作) ofstream文件創建文件寫入 ofstream 文件打開模式std::ios::out 寫入模式std::ios::app 追加模式std::ios::trunc 截斷std::ios::binary 二進制std::ios::ate at the end模式 ifstreamstd::ios::in 讀取模式(默認&…

【Cursor】打開Vscode設置

在這里打開設置界面 打開設置json

智能指針和STL庫學習思維導圖和練習

思維導圖&#xff1a; #include <iostream> #include <vector> #include <string> using namespace std;// 用戶結構體 struct User {string username;string password; };vector<User> users; // 存儲所有注冊用戶// 使用迭代器查找用戶名是否存在 ve…

前端工具方法整理

文章目錄 1.在數組中找到匹配項&#xff0c;然后創建新對象2.對象轉JSON字符串3.JSON字符串轉JSON對象4.有個響應式對象&#xff0c;然后想清空所有屬性5.判斷參數不為空6.格式化字符串7.解析數組內容用逗號拼接8.刷新整個頁面 1.在數組中找到匹配項&#xff0c;然后創建新對象…

狀態空間建模與極點配置 —— 理論、案例與交互式 GUI 實現

目錄 狀態空間建模與極點配置 —— 理論、案例與交互式 GUI 實現一、引言二、狀態空間建模的基本理論2.1 狀態空間模型的優勢2.2 狀態空間模型的物理意義三、極點配置的理論與方法3.1 閉環系統的狀態反饋3.2 極點配置條件與方法3.3 設計流程四、狀態空間建模與極點配置的優缺點…

仿modou庫one thread one loop式并發服務器

源碼&#xff1a;田某super/moduo 目錄 SERVER模塊&#xff1a; Buffer模塊&#xff1a; Socket模塊&#xff1a; Channel模塊&#xff1a; Connection模塊&#xff1a; Acceptor模塊&#xff1a; TimerQueue模塊&#xff1a; Poller模塊&#xff1a; EventLoop模塊&a…

Oracle中的UNION原理

Oracle中的UNION操作用于合并多個SELECT語句的結果集&#xff0c;并自動去除重復行。其核心原理可分為以下幾個步驟&#xff1a; 1. 執行各個子查詢 每個SELECT語句獨立執行&#xff0c;生成各自的結果集。 如果子查詢包含過濾條件&#xff08;如WHERE&#xff09;、排序&…

面試算法高頻04-分治與回溯

分治與回溯 分治和回溯算法&#xff0c;包括其概念、特性、代碼模板&#xff0c;并結合具體題目進行講解&#xff0c;旨在幫助學員理解和掌握這兩種算法的應用。 分治與回溯的概念 分治&#xff08;Divide & Conquer&#xff09;&#xff1a;本質上基于遞歸&#xff0c;先…

線性方程組的解法

文章目錄 線性方程組的解法認識一些基本的矩陣函數MATLAB 實現機電工程學院教學函數構造1.高斯消元法2.列主元消去法3. L U LU LU分解法 線性方程組的解法 看到以下線性方程組的一般形式&#xff1a;設有以下的 n n n階線性方程組&#xff1a; A x b \mathbf{Ax}\mathbf{b} A…

Java的Selenium的特殊元素操作與定位之模態框

Modal Dialogue Box&#xff0c;又叫做模式對話框&#xff0c;是指在用戶想要對對話框以外的應用程序進行操作時&#xff0c;必須首先對該對話框進行響應。如單擊【確定】或【取消】按鈕等將該對話框關閉。 alert&#xff08;警告&#xff09; //訪問本地的HTML文件 chromeDr…

2022年全國職業院校技能大賽 高職組 “大數據技術與應用” 賽項賽卷(1卷)任務書

2022年全國職業院校技能大賽 高職組 “大數據技術與應用” 賽項賽卷&#xff08;1卷&#xff09;任務書 背景描述&#xff1a;模塊A&#xff1a;大數據平臺搭建&#xff08;容器環境&#xff09;&#xff08;15分&#xff09;任務一&#xff1a;Hadoop 完全分布式安裝配置任務二…

題目練習之set的奇妙使用

???~~~~~~歡迎光臨知星小度博客空間~~~~~~??? ???零星地變得優秀~也能拼湊出星河~??? ???我們一起努力成為更好的自己~??? ???如果這一篇博客對你有幫助~別忘了點贊分享哦~??? ???如果有什么問題可以評論區留言或者私信我哦~??? ?????? 個…

Java虛擬機——JVM(Java Virtual Machine)解析一

1.JVM是什么&#xff1f; 1.1 JVM概念 Java Virtual Machine (JVM) 是JDK的核心組件之一&#xff0c;它使得 Java 程序能夠在任何支持 JVM 的設備或操作系統上運行&#xff0c;而無需修改源代碼 JDK是什么&#xff0c;JDK和JVM是什么關系&#xff1f;1.Java IDE(Integrated …