【學Rust寫CAD】37 premultiply 函數(argb.rs補充方法)

源碼

fn premultiply(self) -> Argb {//預乘// This could be optimized by using SWARlet a = self.alpha32();if a < 255 {Argb::new32(a, div255(self.red32() * a), div255(self.green32() * a),div255(self.blue32() * a))}else{self}

源碼分析

這個函數實現了顏色預乘(premultiply)操作,主要用于圖像處理中的alpha合成。

功能
  • 將ARGB顏色值的RGB通道乘以alpha通道值(即預乘alpha)

  • 如果alpha已經是255(完全不透明),則直接返回原值

代碼解析
fn premultiply(self) -> Argb {let a = self.alpha32();  // 獲取alpha通道值(0-255)if a < 255 {  // 只有alpha不是255時才需要處理Argb::new32(a,  // alpha保持不變div255(self.red32() * a),   // 紅色通道乘以alphadiv255(self.green32() * a), // 綠色通道乘以alphadiv255(self.blue32() * a)   // 藍色通道乘以alpha)} else {self  // alpha=255時直接返回原值}
}
關鍵點
  1. div255(x) 是一個快速除以255的優化函數,因為 (x * a) / 255 是預乘的標準公式

  2. 當alpha=255時,預乘不會改變顏色值,所以直接返回原值可以節省計算

  3. 如果使用SWAR(SIMD Within A Register)技術可以進一步優化

預乘的作用

預乘alpha的主要用途是:

  • 使后續的合成操作更高效

  • 避免顏色滲漏到透明區域

  • 是許多圖像合成算法(如over操作)的基礎

這種預乘后的顏色格式稱為"premultiplied alpha",廣泛應用于圖形渲染和圖像處理中。

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

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

相關文章

Redis-一般操作

1.redis命令CRUG網站 2.string 、 hash 、list 、 set 、zset 3.4種應用(對象存儲、累加器、分布式鎖、位運算) 1.redis命令CRUG網站 2string 、 hash 、list 、 set 、zset 3.4種應用(對象存儲、累加器、分布式鎖、位運算) 1.redis命令CRUG網站 #1.啟動redis redis-server r…

Vue 基礎語法介紹

Vue.js 是一個漸進式的 JavaScript 框架&#xff0c;廣泛用于構建用戶界面和單頁應用&#xff08;SPA&#xff09;。它的核心思想是通過簡單的模板語法和響應式的數據綁定機制&#xff0c;使得開發者能夠更直觀地創建動態交互的網頁。本文將介紹 Vue.js 的一些基礎語法&#xf…

Flask + Pear Admin Layui 快速開發管理后臺

框架介紹 Flask 就不用過多介紹了, Pear Admin Layui 是基于 Layui 的一套管理后臺前端開源模板, 主打一個開箱即用, 對于不喜歡 React/Vue 等這些還需要大量學習成本的前端開發者來說, 可以說是相當友好了. 項目官網: https://gitee.com/pear-admin/pear-admin-layui 項目的作…

git push

在 git push 命令中&#xff0c;分支名稱的順序和含義非常重要。其基本格式如下&#xff1a; git push <remote> <local_branch>:<remote_branch>各部分解釋 <remote>&#xff1a;遠程倉庫的名稱&#xff08;如 origin&#xff09;。<local_branc…

wordpress 利用 All-in-One WP Migration全站轉移

導出導入站點 在插件中查詢 All-in-One WP Migration備份并導出全站數據 導入 注意事項&#xff1a; 1.導入部分限制50MB 寶塔解決方案&#xff0c;其他類似&#xff0c;修改php.ini配置文件即可 2. 全站轉移需要修改域名 3. 大文件版本&#xff0c;大于1G的可以參考我的…

藍橋杯補題

方法技巧&#xff1a; 1.進行循環暴力騙分&#xff0c;然后每一層的初始進行判斷&#xff0c;如果已經不滿足題意了&#xff0c;那么久直接continue&#xff0c;后面的循環就不用浪費時間了。我們可以把題目所給的等式&#xff0c;比如說有四個未知量&#xff0c;那么我們可以用…

MySQL:鎖

按粒度分類 全局鎖 含義&#xff1a;全局鎖會鎖定整個數據庫實例&#xff0c;在其生效期間&#xff0c;其他事務無法對數據庫進行任何讀寫操作。常用于數據遷移、數據備份場景。 表級鎖 表鎖&#xff1a;是對整張表進行鎖定的機制。實現邏輯簡單&#xff0c;加鎖和釋放鎖速…

數字政府政務服務領域智能化應用解決方案

數字政府政務服務領域智能化應用 解決方案 一、方案背景 在數字經濟蓬勃發展的當下&#xff0c;數字化轉型已成為政府提升治理能力、優化公共服務、增強競爭力的關鍵路徑。黨的十九屆四中全會明確提出 “推進數字政府建設”&#xff0c;這為政府的數字化轉型指明了方向。 隨…

03--Deepseek服務器部署與cjson解析

一、ollama部署deepseek模型 1、Ollama 是一個開源的本地大語言模型運行框架&#xff0c;專為在本地機器上便捷部署和運行大型語言模型&#xff08;LLM&#xff09;而設計。 Ollama 教程&#xff1a;從 0 到 1 全面指南 教程【全文兩萬字保姆級詳細講解】 -CSDN博客 1.下載o…

棧(算法)

在 C 里&#xff0c;棧是一種遵循后進先出&#xff08;LIFO&#xff09;原則的數據結構。下面從多個方面為你介紹 C 棧&#xff1a; 1. 使用標準庫中的std::stack C 標準庫提供了std::stack容器適配器&#xff0c;能方便地實現棧的功能。以下是簡單示例&#xff1a; cpp #in…

UniApp 頁面布局自定義頭部導航

動態計算頭部高度與內容偏移量&#xff1a;實現 UniApp 頁面布局的精準適配 在移動端應用開發中&#xff0c;頁面布局的精準適配是一個關鍵問題。尤其是在 UniApp 中&#xff0c;不同設備的屏幕尺寸、狀態欄高度以及頭部布局的差異&#xff0c;可能導致頁面內容錯位或顯示不全…

verilog學習--1、語言要素

先看一個例子 /*This is first Verilog progaram*/ timescale 1ns/1ns module HalfAdder(A,B,Sum,Carry);input A,B;output Sum, Carry; /**/assign #2 SumA^B;assign #5 CarryA&B&#xff1b; endmodule; Verilog以module為單位編寫&#xff0c;每個文件一個module&#…

AC 自動機 洛谷P3808 P3796 P5357

洛谷P3808 #include <bits/stdc.h> using namespace std; const int maxn 1e6 5; int ch[maxn][30], fa[maxn], End[maxn]; int cnt 0 , n; int get_num(char c){return c - a;} void build(string s){int cur 0, len s.length();for(int i 0; i < len; i){int…

C++藍橋杯實訓篇(二)

片頭 嗨咯~小伙伴們&#xff01;今天我們來一起學習算法和貪心思維&#xff0c;準備好了嗎&#xff1f;咱們開始咯&#xff01; 第1題 數位排序 對于這道題&#xff0c;我們需要自己寫一個排序算法&#xff0c;也就是自定義排序&#xff0c;按照數位從小到大進行排序。 舉一…

redisson常用加鎖方式

RLock lock redissonClient.getLock("lock:order:" order);和redissonDistributedLocker.tryLock("lock:order:" order&#xff0c; TimeUnit.SECONDS, RedisLockKey.DEFAULT_WAIT_TIME, RedisLockKey.DEFAULT_HOLD_TIME);這兩種加鎖方式的區別如下&…

Go 微服務框架 | 路由實現

文章目錄 不用框架實現web接口實現簡單的路由實現分組路由支持不同的請求方式支持同一個路徑的不同請求方式前綴樹應用前綴樹完善路由代碼 不用框架實現web接口 // blog main.go 文件 package mainimport ("fmt""log""net/http" )func main() {…

zabbix中通過模板實現自動發現對tcp端口批量監控

主要為了解決監控大量端口&#xff0c;避免繁瑣的重復操作監控項和觸發器 諸位~ 僅供參考哈 自動發現監控參考地址: https://blog.csdn.net/qq_37510195/article/details/130893655 模板 首先創建一個模板 自定義名稱和群組 創建自動發現規則 模板——自動發現——創建發現規則…

Mysql備忘記錄

1、簡介 Mysql操作經常忘記命令&#xff0c;本文將持續記錄Mysql一些常用操作。 2、常見問題 2.1、忘記密碼 # 1、首先停止Mysql服務 systemctl stop mysqld # windows 從任務管理器里面停 # 2、更改配置文件 my.cnf (windows是 ini文件) vim /etc/my.cnf 在[mysqld]下面添…

【藍橋杯】15屆JAVA研究生組F回文字符串

一、思路 1.這題去年考的時候想的是使用全排列進行嘗試&#xff0c;實際不用這么麻煩&#xff0c;只用找到第一個和最后一個非特殊字符串的位置&#xff0c;然后分別向內檢查是否對稱&#xff0c;向外檢查是否對稱直到左指針小于0(可以通過添加使其對稱) 2.至于如何找到第一個…

X 進制減法

題目鏈接&#xff1a; 思路&#xff1a; X進制數321怎么轉換為十進制數為65&#xff1f;如下圖&#xff1a; ①題目要求我們求 A - B 的最小值&#xff0c;對第 i 位&#xff0c;要求 A[i] - B[i] 的最小值&#xff0c;當進制越小的時候差值越小&#xff0c;但進制要比 max&…