WPF遷移avalonia之圖像處理(一)

從WPF遷移到avalonia中,對于圖像處理部分,在WPF常用System.Windows.Drawing中圖像處理元素,但是在開發avalonia應用時考慮跨平臺特性,則必須有對應的跨平臺替換方案。主要考慮Avalonia.Media.Imaging.Bitmap和SkiaSharp.SKBitmap

方案比對

特性維度Avalonia.Media.Imaging.BitmapSkiaSharp.SKBitmap
集成度與兼容性原生支持,與Avalonia控件和綁定機制無縫集成?? 需額外安裝 NuGet包,但API穩定且跨平臺一致
功能豐富度提供日常UI操作(加載、顯示、簡單變換)支持高級濾鏡、路徑繪制、文本渲染、多種顏色空間等復雜圖像處理
性能對常規UI操作進行了優化高性能,底層為C++實現的Skia庫,復雜圖形操作和渲染效率高
API 風格與學習曲線與WPF的System.Windows.Media.Imaging.BitmapImage類似,遷移成本低自成體系的API,需一定學習成本,但功能強大靈活
跨平臺一致性依賴Avalonia的實現行為高度一致,各平臺渲染結果相同
內存與資源管理與Avalonia UI元素生命周期綁定需留意手動管理SKBitmap等對象的釋放(使用usingDispose
優選情況

1.圖像的加載、顯示、簡單的縮放或裁剪

2.圖像直接與Avalonia的Image控件綁定

3.希望盡量減少外部依賴,WPF改動較少

1.復雜的圖像處理,如應用濾鏡、模糊、銳化、顏色校正等

2.動態生成內容豐富的圖片

3.極高的跨平臺一致性

根據項目特性,考慮使用SkiaSharp.SKBitmap;最后選擇Avalonia.Media.Imaging.Bitmap與SkiaSharp.SKBitmap結合的方案

1.考慮圖片會綁定到ImageViewer控件,該控件數據源是IImage?類型Avalonia.Media.Imaging.Bitmap可以直接綁定,但是SkiaSharp.SKBitmap不可直接綁定,且avalonia中使用Avalonia.Media.Imaging.Bitmap改動較少;

2.考慮需要對圖像進行圖像處理,如灰度化,銳化等,所以使用SkiaSharp.SKBitmap

實現方案

1.將Avalonia的Bitmap轉換為SkiaSharp的SKBitmap。

2.使用SkiaSharp進行圖像處理。

......

3.將SkiaSharp的SKBitmap轉換回Avalonia的Bitmap。

WPF遷移avalonia的圖像部分常遇問題

1.OpenCvSharp.Extensions.BitmapConverter拓展包僅適用于Windows

OpenCvSharp.Extensions.BitmapConverter僅限用于Windows平臺,因為WPF和avalonia的使用圖像不同(System.Drawing.Bitmap vs Avalonia.Media.Imaging.Bitmap),所以需要實現一組

Mat ? Avalonia Bitmap相互轉換的方法。

2.WPF 中的灰度處理使用矩陣ColorMatrix 轉換為 SkiaSharp 顏色矩陣

要將 WPF 的 5×5 矩陣轉換為 Skia 的 4×5 矩陣,如果使用HLSL著色器,則可能需要將矩陣轉置(因為HLSL是列主序),并且需要將矩陣擴展矩陣(對于RGB和A的變換)

WPF的矩陣含義

new float[][] {new float[] {.711f, .7111f, .711f, 0, 0},  // 紅色輸出 = 0.711*R + 0.711*G + 0.711*B + 0*A + 0new float[] {.222f, .222f, .222f, 0, 0},  // 綠色輸出 = 0.222*R + 0.222*G + 0.222*B + 0*A + 0new float[] {.111f, .111f, .111f, 0, 0},  // 藍色輸出 = 0.111*R + 0.111*G + 0.111*B + 0*A + 0new float[] {0, 0, 0, 1, 0},        // Alpha輸出 = 0*R + 0*G + 0*B + 1*A + 0new float[] {0, 0, 0, 0, 1}         // 偏移量(通常為0,0,0,0,1)
}
  1. 轉置這些行(行變列,列變行)
  2. 保持每行的第 5 個值(偏移量)不變

avalonia下變換后的矩陣轉換

new float[] {0.711f, 0.222f, 0.111f, 0, 0,  // 第一列:紅色系數0.711f, 0.222f, 0.111f, 0, 0,  // 第二列:綠色系數0.711f, 0.222f, 0.111f, 0, 0,  // 第三列:藍色系數0,    0,    0,    1, 0   // 第四列:Alpha系數
}

顯示效果

使用灰度化矩陣后

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

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

相關文章

242. 有效的字母異位詞| 349. 兩個數組的交集

242. 有效的字母異位詞 nums [0]*26 : 這行代碼創建了一個包含26個0的列表,這個列表通常用于計數或者作為某種映射的基礎,比如統計字符串中每個字母出現的次數(假設只考慮小寫字母a-z)。 ord() Python 中的一個內置函數&#x…

HTML第二課:塊級元素

HTML第二課&#xff1a;塊級元素塊級元素塊級元素 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang"zh-CN"> <head><meta http-equiv"Content-…

微論-突觸的作用賦能思考(可能是下一代人工智能架構的啟發式理論)

突觸智能&#xff1a;微觀結構與宏觀智慧的橋梁摘要&#xff1a;傳統人工智能模型&#xff0c;尤其是深度學習&#xff0c;將突觸簡單抽象為一個靜態的權重參數&#xff0c;這極大地簡化了生物計算的復雜性。本文受啟發于生物突觸的微觀功能&#xff0c;提出了一種新的智能架構…

ARM - GPIO 標準庫開發

一、STM32MP157AAA開發板套件介紹1.1 核心板 - 主板如圖所示&#xff1a;主板各部分介紹1.2 IO 拓展板如圖所示&#xff1a;IO拓展板各部分介紹開發板名稱&#xff08;硬件平臺&#xff09;&#xff1a;FS-MP1A主控制器&#xff1a;STM32MP157AAA3 Cortex-A7 * 2 Cortex-M4 -…

橙武低代碼:不僅僅是云SaaS,更是云端開發+本地部署的新范式

版權歸作者所有&#xff0c;轉載請注明出處。 一、低代碼的時代背景 在過去十年里&#xff0c;軟件研發模式經歷了巨大的演變。從傳統的瀑布開發&#xff0c;到敏捷、DevOps&#xff0c;再到如今的低代碼/無代碼平臺&#xff0c;研發效率和交付模式發生了根本性變化。低代碼的…

神經語言學視角:腦科學與NLP深層分析技術的交叉融合

引言&#xff1a;從“統計擬合”到“類人理解”——NLP的下一個范式近年來&#xff0c;以Transformer架構為核心的大型語言模型&#xff08;LLM&#xff09;在自然語言處理&#xff08;NLP&#xff09;領域取得了前所未有的成功 。它們能夠生成流暢的文本、回答復雜的問題&…

Coze源碼分析-工作空間-項目查詢-前端源碼

前言 本文將深入分析Coze Studio項目中用戶登錄后進入工作空間查看和管理項目的前端實現&#xff0c;通過源碼解讀來理解工作空間項目開發功能的架構設計和技術實現。Coze Studio采用了現代化的React TypeScript技術棧&#xff0c;結合微前端架構和模塊化設計&#xff0c;為用…

【系統架構師設計(9)】系統設計:結構化設計與面向對象設計

文章目錄一、核心思想&#xff1a;模塊化與對象化的設計哲學1、結構化設計的核心思想2、面向對象設計的核心思想3、兩種設計方法的本質區別二、結構化設計知識點1、設計階段2、設計原則3、 內聚類型&#xff08;從低到高&#xff09;耦合類型&#xff08;從低到高&#xff09;模…

還在從零開發AI應用?這個項目直接給你500個現成方案!!!

大家好&#xff0c;我是顧北&#xff0c;一名AI應用探索者&#xff0c;也是GitHub開源項目收集者。昨晚又在GitHub上瞎逛...咦&#xff0c;碰到了一個特別有意思的項目。說實話吧&#xff0c;作為一個天天折騰AI工具的人&#xff0c;見過的項目沒有一千也有八百了&#xff0c;但…

react+taro的使用整理

前言&#xff1a; 本文主要整理下我們跨段工具taro的具體使用方法與相關資料。 taro官網&#xff1a; 安裝及使用 | Taro 文檔 安裝&#xff1a; 全局腳手架安裝&#xff1a; npm install -g tarojs/cli 使用腳手架安裝我們的taro項目 taro init myApp 運行到不同小程序教…

從 “容器保姆” 到 “云原生王者”:K8s 全方位指南

目錄 開頭專業總結 一、先搞懂&#xff1a;K8s 到底是什么&#xff1f;能解決什么痛點&#xff1f; 1. K8s 的本質 2. 核心用處&#xff08;解決的痛點&#xff09; 二、K8s 核心知識點&#xff1a;組件與概念&#xff08;標重點&#xff01;&#xff09; &#xff08;一…

03.《交換的底層邏輯:從基礎到應用》

交換基礎 文章目錄交換基礎MAC 地址&#xff1a;設備的 “全球唯一身份證”MAC 地址的基本屬性MAC 地址的三類類型&#xff08;按通信范圍劃分&#xff09;以太幀以太幀的兩個標準格式1. Ethernet_II 格式&#xff08;常用&#xff09;2. IEEE 802.3 格式&#xff08;少用&…

火語言 RPA 界面應用生成:輕量化開發核心優勢

火語言 RPA 界面應用生成功能&#xff0c;主打 “低門檻、快落地”&#xff0c;無需復雜開發環境與專業技術&#xff0c;就能快速實現需求驗證與工具搭建&#xff0c;尤其適配中小團隊與個人&#xff0c;核心優勢如下&#xff1a;?一、1 小時搞定需求驗證&#xff1a;3 步落地…

第三方軟件測試機構【多語言開發(PHP/Java/Python)WEB 應用的安全專業測試流程】

PHP應用測試安全 文件包含漏洞&#xff1a;檢測include/require函數參數未過濾場景&#xff08;如?page../../../etc/passwd&#xff09; 命令注入&#xff1a;檢查system()/exec()函數輸入驗證&#xff08;如| cat /etc/passwd&#xff09; 會話安全&#xff1a;驗證session …

C++條件變量學習

1、概述你知道條件變量"虛假喚醒"問題么&#xff0c;下面代碼有問題么void CFileTaskThread::Run() {while (!m_bStop){CFileItemRequest* pFileItem;{std::unique_lock<std::mutex> guard(m_mtItems);if (m_Filelist.empty()){if (m_bStop)return;// 等待條件…

React Native系統組件(一)

1&#xff0c;View&#xff0c;UI的構建基石 四個方向&#xff0c;水平&#xff0c;水平倒序&#xff0c;垂直&#xff0c;垂直倒序 flexGrow與flex的區別&#xff0c;flexgrow是分父布局剩余的空間&#xff0c;flex是分父布局全部的空間上面的是flexgrow 123 下面的是flex 123…

Git 代碼提交管理指南

目錄 1. 初始設置&#xff08;首次使用 Git 時&#xff09; 2. 日常提交工作流程 場景一&#xff1a;已有本地項目&#xff0c;首次連接到遠程倉庫 場景二&#xff1a;已有遠程倉庫&#xff0c;克隆到本地 3. 更精細的文件管理 4. 提交信息規范 5. 分支管理策略 6. 高級…

go-mapus最簡單的離線瓦片地圖協作

基于leaflet.jsleaflet-geoman.jsgolangbeegogormsqlitewebsocket等實現一個最簡單的地圖協作。繪制圖元&#xff0c;其他用戶瀏覽器上實施顯示繪制和修改結果&#xff0c;大家可同步進行繪制和修改。設置線型和顏色&#xff0c;粗細和透明度。保存到sqlite數據庫。動畫演示地圖…

調式記錄之八位機軟件串口

現在在上班&#xff0c;做的項目幾乎都是關于八位機的&#xff0c;八位機有個挺CD的點硬件資源少&#xff0c;打印之類的需要軟件串口&#xff0c;有時候調的剛到很玄學&#xff0c;也有可能是我知識沒有學得恨透。首先我得需要發送這句話并在代碼里面設置我的延時時間&#xf…

嵌入式學習day40-硬件(1)

嵌入式&#xff1a;以應用為中心&#xff1a;消費電子(手機、藍牙耳機、智能音響&#xff09;、醫療電子(心率脈搏、呼吸機&#xff09;、無人機&#xff08;大疆DJ&#xff09;、機器人&#xff08;人形四足機器人)計算機技術&#xff1a;計算機五大組成&#xff1a;運算器(數…