wpf在image控件上快速顯示內存圖像

wpf在image控件上快速顯示內存圖像https://www.cnblogs.com/haodafeng/p/10431387.html

?

如果你在尋找能夠快速在image控件刷新大圖像(比如分辨率3000*3000的圖像)的辦法,尤其是想把內存中的裸數據(只有圖像的數據,不包含圖像頭等信息)快速顯示到界面,那么你來對地方了,看完這篇博客會解決困擾了你一天,或者一個禮拜,或者一年,或者一輩子的問題,時間的長短取決于你看到這篇博客的時間。

請注意:如果本篇博客對于解決你的問題起到了決定性的作用,那么請在你的代碼里加上以下兩行內容,請尊重別人的努力。轉載請注明出處

// provide by zhangshaohui?

// 本文網址

以下是正文:

在你尋找解決方案的過程中,一定看到過這樣的代碼:

1、這個代碼最常見,網上到處都是,的確可以用,也簡單清晰,但是速度太慢,顯示一個3000*3000的大概要40ms,我跟蹤了一下代碼,主要是new stream,以及EndInit比較耗時,但是用這個方法又繞不過去這兩行代碼。

復制代碼

  public BitmapImage BitmapToBitmapImage(Bitmap bitmap){using (MemoryStream stream = new MemoryStream()){bitmap.Save(stream, ImageFormat.Png); stream.Position = 0;BitmapImage result = new BitmapImage();result.BeginInit();result.CacheOption = BitmapCacheOption.OnLoad;result.StreamSource = stream;result.EndInit();result.Freeze();return result;}}

復制代碼

2、這個也是常見的辦法,好像還是msdn上推薦的,缺點是更慢

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

public?static?ImageSource ChangeBitmapToImageSource(Bitmap bitmap)

???????{

???????????IntPtr hBitmap = bitmap.GetHbitmap();

???????????ImageSource wpfBitmap = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(

???????????????hBitmap,

???????????????IntPtr.Zero,

???????????????Int32Rect.Empty,

???????????????BitmapSizeOptions.FromEmptyOptions());

???????????if?(!APIConverter.DeleteObject(hBitmap))

???????????{

???????????????throw?new?System.ComponentModel.Win32Exception();

???????????}

???????????return?wpfBitmap;

???????}

  

如果對于顯示速度沒有什么要求,那么這兩個辦法還是可以用用的,但是如果對于性能有要求,而且又數據量很大,比如接收超高清的視頻數據,那么這兩個方法是完全滿足不了需求的。

本文的方案是:

1、以顯示3000 * 3000的圖像為例,下面的代碼是偽代碼

2、定義ImageSource?ImgSource,ImgSource綁定到image控件的Source屬性?

3、PixelFormats.Gray16,定義為PixelFormats.Gray8也是可以的,不過就需要在WriteableBitmap構造函數最后一個參數添加偽彩表,當然還可定義rgb的格式,這個看裸數據的格式以及需求來了,這里只是拋磚引玉,方法是通用的。

4、本方案的優點是沒有頻繁的內存分配和釋放,既節省時間,又不用擔心內存溢出,想更新哪里更新哪里,代碼簡單易懂,速度極快

?

復制代碼

ViewModel中public class MainWindowViewModel : ViewModelBase{private WriteableBitmap _wbBitmap;public MainWindowViewModel(){_wbBitmap = new WriteableBitmap(3000, 3000, 96, 96, PixelFormats.Gray16, null);ImgSource = _wbBitmap;}    public void ShowImage(short[] rawData)// rawData是存儲圖像裸數據的buffer{unsafe{_wbBitmap.Lock();Marshal.Copy(rawData,0,_wbBitmap.BackBuffer,3000*3000); //請注意_wbBitmap的數據格式以及buffer大小,以免溢出和顯示異常
_wbBitmap.AddDirtyRect(new System.Windows.Int32Rect(0, 0, 3000, 3000)); _wbBitmap.Unlock(); } } } 

復制代碼

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

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

相關文章

解決網頁導出PDF部分內容被遮擋問題

問題描述 以學習通為例,在使用CtrlP打印頁面或截圖時,固定側邊欄會遮擋部分內容,影響完整內容的獲取。如下圖所示: 解決辦法 通過瀏覽器開發者工具臨時移除固定側邊欄,具體步驟如下: 在目標頁面右鍵點…

機器學習監督學習實戰六:五種算法對新聞組英文文檔進行文本分類(20類),詞頻統計和TF-IDF 轉換特征提取方法理論和對比解析

本文主要介紹了20 Newsgroups數據集及其在文本分類任務中的應用。20 Newsgroups數據集包含約20,000篇新聞組文檔,分為20個不同主題的新聞組,數據集被分為訓練集和測試集。在數據預處理階段,使用了CountVectorizer和TfidfVectorizer兩種方法將…

易學探索助手-個人記錄(十四)

項目背景 在大語言模型(LLM)完成指令微調(SFT)之后,雖然可以處理開放式問答任務,但在專業領域(如《周易》)仍面臨知識更新滯后、事實性薄弱等問題。為此,本文介紹如何通…

從“人找政策”到“政策找人”:智能退稅ERP數字化重構外貿生態

離境退稅新政核心內容與外貿企業影響 (一)政策核心變化解析 退稅商店網絡擴容 新政明確鼓勵在大型商圈、旅游景區、交通樞紐等境外旅客聚集地增設退稅商店,并放寬備案條件至納稅信用M級企業。以上海為例,靜安區計劃新增1000家退…

Pandas 可視化集成:數據科學家的高效繪圖指南

為什么選擇 Pandas 進行數據可視化? 在數據科學和分析領域,可視化是理解數據、發現模式和傳達見解的關鍵步驟。Python 生態系統提供了多種可視化工具,如 Matplotlib、Seaborn、Plotly 等,但 Pandas 內置的可視化功能因其與數據結…

曼昆《經濟學原理》第九版 第十一章公共物品與公共資源

一、物品分類的基本框架 排他性:能否阻止他人使用該物品的特性競爭性:一個人使用是否減少他人使用的特性 根據這兩個特性可將物品分為四類: 私人物品:既有排他性又有競爭性(如冰淇淋、衣服)公共物品&…

基于大模型預測原發性急性閉角型青光眼的技術方案研究大綱

目錄 一、引言二、技術方案概述三、術前階段(一)數據采集與處理(二)大模型預測(三)手術方案制定(四)麻醉方案確定(五)術前健康教育四、術中階段(一)實時數據監測與輸入(二)手術策略動態調整(三)并發癥預警與處理(四)術中健康教育五、術后階段(一)恢復監測與…

基于React 的 AntD 庫進行前端開發過程中的問題匯總

背景 最近寫了半個月的 React 前端,三年沒寫過 React 前端了,有些生疏了,匯總一下 基于React 前端的 antD 庫編寫過程中的低級問題吧。 PS 一下,半個月沒有發布博客了,C站產品經理又悄默默地改了樣式,博客…

Spring @Scheduled vs XXL-JOB vs DolphinScheduler vs Airflow:任務調度框架全景對比

引言 從單機定時任務到分布式工作流調度,不同場景需要選擇匹配的調度框架。 本文對比 Spring Scheduled、XXL-JOB、DolphinScheduler (海豚調度器)和 Apache Airflow 的核心差異,助你避免過度設計或功能不足。 一、核心定位與適用…

springMVC-10驗證及國際化

驗證 概述 ● 概述 1. 對輸入的數據(比如表單數據),進行必要的驗證,并給出相應的提示信息。 2. 對于驗證表單數據,springMVC提供了很多實用的注解, 這些注解由JSR303 驗證框架提供. ●JSR 303 驗證框架 1. JSR 303 的含義 JSR&#xff0…

OpenCV 滑動條調整圖像對比度和亮度

一、知識點 1、int createTrackbar(const String & trackbarname, const String & winname, int * value, int count, TrackbarCallback onChange 0, void * userdata 0); (1)、創建一個滑動條并將其附在指定窗口上。 (2)、參數說明: trackbarname: 創建的…

ReadWriteLock(讀寫鎖)和 StampedLock

1. ReadWriteLock(讀寫鎖):實現高性能緩存 總結: 要點 內容 適用場景 讀多寫少、高并發讀取場景(如緩存) 鎖類型 ReadWriteLock接口,ReentrantReadWriteLock實現 讀鎖 vs 寫鎖 多線程可…

【決勝公務員考試】求職OMG——見面課測驗1

2025最新版!!!6.8截至答題,大家注意呀! 博主碼字不易點個關注吧,祝期末順利~~ 1.單選題(2分) 下列說法錯誤的是:( B ) A.選調生屬于公務員系統 B.公務員屬于事業編 C.選調生有基層鍛煉的要求 D…

vue3 el-button 自定義本地圖標

設置不生效的原因可能有&#xff1a;1.style標簽里沒加scoped <style scoped></style>2.本地圖片路徑指向錯誤3.自定義圖片長寬沒設置4.deep深度選擇器使用錯誤&#xff0c;vue3用:deep() <el-tooltip content"重新匹配" placement"top"&g…

如何在最短時間內提升打ctf(web)的水平?

剛剛刷完2遍 bugku 的 web 題&#xff0c;前來答題。 每個人對刷題理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟著writeup做了一遍就等于刷了&#xff0c;還有的人是獨立思考做了一遍就等于刷了。…

6.8 note

paxos算法_初步感知 Paxos算法保證一致性主要通過以下幾個關鍵步驟和機制&#xff1a; 準備階段 - 提議者向所有接受者發送準備請求&#xff0c;請求中包含一個唯一的編號。 - 接受者收到請求后&#xff0c;會檢查編號&#xff0c;如果編號比它之前見過的都大&#xff0c;就會承…

c++ openssl 使用 DES(數據加密標準)進行加密和解密的基本操作

使用 DES&#xff08;數據加密標準&#xff09;進行加密和解密的基本操作&#xff0c;重點展示了 ECB 和 CBC 模式&#xff0c;并且通過篡改密文的方式來進行攻擊。下面是對每個部分的詳細解析。 1. 結構體 Slip struct Slip {char from[16] { 0 }; // 交易的發起者&#x…

OpenWrt:使用ALSA實現邊錄邊播

ALSA是Linux系統中的高級音頻架構&#xff08;Advanced Linux Sound Architecture&#xff09;。目前已經成為了linux的主流音頻體系結構&#xff0c;想了解更多的關于ALSA的知識&#xff0c;詳見&#xff1a;http://www.alsa-project.org 在內核設備驅動層&#xff0c;ALSA提供…

【.net core】天地圖坐標轉換為高德地圖坐標(WGS84 坐標轉 GCJ02 坐標)

類文件 public static class WGS84ToGCJ02Helper {// 定義一些常量private const double PI 3.14159265358979324;private const double A 6378245.0;private const double EE 0.00669342162296594323;// 判斷坐標是否在中國范圍內&#xff08;不在國內則不進行轉換&#x…

Matlab自學筆記五十七:符號運算、可變精度運算、雙精度浮點型運算,三種運算精度的概念、比較、選擇和應用

1.可變精度算術的概念 默認的&#xff0c;Matlab雙精度浮點數使用16位數字精度&#xff0c;而符號數學工具箱的vpa函數&#xff0c;提供了無限大的可變精度&#xff0c;它默認使用32位數字精度&#xff0c;32位指的是有效數字的位數&#xff1b; 2.具體用法 程序示例&#x…