如何顯示超大圖像

来源:http://www.cnblogs.com/mataiyuan/archive/2017/10/31/7760756.html
-Advertisement-
Play Games

1:做過圖像顯示的都知道,我們的圖片大部分都是壓縮過的,大部分為JPEG PNG BMP其中BMP格式是點陣形式,當圖片翻譯到記憶體之後無論壓沒壓縮過都會變成BMP格式放進記憶體,在這個過程中,圖片數據會幾倍的增大,就比如JPEG,一張1M大小的JPEG格式的圖片,翻譯到記憶體可能就會變成7倍左右,也就是 ...


1:做過圖像顯示的都知道,我們的圖片大部分都是壓縮過的,大部分為JPEG PNG BMP其中BMP格式是點陣形式,當圖片翻譯到記憶體之後無論壓沒壓縮過都會變成BMP格式放進記憶體,在這個過程中,圖片數據會幾倍的增大,就比如JPEG,一張1M大小的JPEG格式的圖片,翻譯到記憶體可能就會變成7倍左右,也就是7M會放在電腦記憶體裡面,如果顯示一張100M的JPEG圖片,放進記憶體的話可能就會成為1G,好瞭如果是1G的圖片呢,你的電腦記憶體還夠用嗎,可以,兄弟你可以說我電腦配置很高 達到16G記憶體條,,如果我要讓你顯示一張4G的圖片呢,註意壓縮過的,翻譯到記憶體將近28G,你說我可以買一個28G的記憶體條,可以 ,兄弟你很有錢,哈哈哈,,如果你非要這樣,這篇文章可以不用看了,跪拜土豪。那如果,我就想用一個2G的記憶體條顯示這張壓縮過還有4G的圖片咋辦,並且我還想生成這張圖片呢,就比如說,我用顯微鏡拍一張切片,或則一個材料的紋理結構,那麼雖然或許一個切片只有幾個CM,但是顯微鏡人家解析度高呀,看的細呀,用顯微鏡不就是想把圖片放大個幾千倍顯示嘛,好了,問題來了,這樣顯微照相機可能要拍上千張圖片,最後拼接成一張大圖,然後放在電腦上顯示,所有醫生可以在電腦面前指指點點,是不是很方便,但是,同志,問題又來了,電腦記憶體不夠,你也生成不了這麼大的圖片,生成的過程也是在電腦記憶體裡面的,   好了,廢話不多說了,看下麵的演示吧。

1:準備一張54889x80315圖片,當然不一定很多人會有這麼大的圖片,因為不知道這種技術的話,也沒法生成這麼大的圖片。

如圖:

這張圖片大小是54889x80315 這數據量大概有多大呢,我算了一下,大概是4.2041G,細心的網友可能會註意到,為什麼顯示的大小隻有399M 呢,,哈哈哈,,這就是另一個技術了,想聽的朋友們,會在後續的文章中,解密。

2:現在假設我們大家都有了這張圖片了,下麵我們想顯示這張圖片:首先,都會想到的,我用常規的瀏覽器試一下唄,我們就先用微軟自帶的圖片瀏覽器,不要小瞧了這個windows圖片查看器,親測,他很智能,也很高效,千萬不要以為他是個小程式,有時候我確實可以打開我的圖片,即使我的圖片有著我設計的特殊的數據結構和壓縮形式,PS都不能打開我的圖片,這家伙可以打開,所以在這裡我還是很佩服這個圖片瀏覽器。

怎麼樣,哈哈哈,電腦記憶體不夠吧,當然這個瀏覽器再弔,也只是傻大粗的野蠻式顯示這張圖片,當然記憶體不夠用了。我在我朋友8G記憶體的電腦上也試了,一樣死機!!!顯示都顯示不了了,還談什麼產生這張圖片。

3:但是呢,我用自己寫的軟體,就可以打開這張圖片,當然之前我也知道怎麼產生這張圖片,這是一個完整的流程;我的軟體打開的效果是:

來一張全局的圖像效果:如下:

 

其實把圖片使勁縮小顯示,圖片的全局效果就長成這樣。其實效果和你顯示一張小圖片沒什麼區別,流暢度,還有你可以做標記,什麼的,,,,這些都是很多別的瀏覽器都具備的附加功能,但是當這些附加功能實現過程也是很痛苦的,為什麼呢,就是因為這是一張超大圖片,太大了,顯示機制不一樣,所以一切傳統方法都得顛覆一下。

 

寫的好累,這個項目,做了兩年,就是為了完成這個軟體,整個過程也比較痛苦,因為我是機械出身,現在還在學校讀研究生,寫代碼的水平趕不上科班出身,這項技術整個完整流程,我打算慢慢寫下來,從你如何產生一張目前為止最大的圖片,讓你圖像拼接突破電腦限制,讓你如何顯示出來,如何平移,如何縮放,如何做標記等等,,太多了內容,,完整工程文件,包括編譯好的庫文件,我都有,壓縮包解壓就可以直接用,我用WPF編寫的,其實WPF就和C#差不多,其實他兩是兄弟。代碼數量超過好幾萬。可是花費了我好大的心血。有興趣的朋友可以百度一下Aperio,MOTIC這些企業,Aperio這個軟體是和他的儀器配套出售的,據說一臺儀器好幾百萬,功能就是顯微鏡掃描一個切片,然後打開瀏覽切片,主要是方便醫生進行切片檢查,同時減輕醫生的工作量,要知道,沒有這個儀器的話,醫生可要用眼睛一個個看切片,成千上萬的切片這是要累死醫生呀!!!眼睛瞅瞎!!!Aperio他們做的掃描一張切片就幾秒,然後就輸入到電腦,用軟體顯示出來,這個軟體核心功能,也就是我這個軟體的功能。。。。。。。

整個軟體涉及到的技術有,TIFF圖像技術,四叉樹,虛擬顯示技術,虛擬容器技術,記憶體映射文件技術,圖像金字塔技術等等剩下的就是什麼,做標記,XML文檔管理,縮略圖顯示,UI佈局等等  真的很多。

有興趣的朋友可以關註後續的文章,有需要這個軟體的可以聯繫我,我的郵箱[email protected],可以商量。今天就寫到這。。。。。。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 委托的概念 委托是一個類,它定義了方法的類型,使得可以將方法當作另一個方法的參數來進行傳遞,這種將方法動態地賦給參數的做法,可以避免在程式中大量使用If-Else(Switch)語句,同時使得程式具有更好的可擴展性。通俗的來說委托是一個類型,它與Class 是同一級別的。 如何使用委托 在使用委托的 ...
  • 利用split 和遞歸做的 感覺還行:) 返回值是匹配程度全。 ...
  • 想在網頁上,顯示當前系統時鐘。 <body ng-app="App2" ng-controller="Ctrl2"> <div ng-bind="ShowTime"> </div> </body> angularjs程式: var app = angular.module('App2', []); ...
  • 1 //定義類 2 public class MyClass 3 { 4 public int Property1 { get; set; } 5 } 6 static void Main() 7 { 8 MyClass tmp_Class = new MyClass(); 9 tmp_Class.... ...
  • 今天練習angularjs的ng-change事件。 比如用戶作出選擇時,系統所指定的選項中,沒有用戶合適的選項。此時我們可以讓用戶填寫。 剛開始文本框是隱藏的。當用戶選擇了checkbox之後才會顯示出來。 在angularjs程式的model中IsVisible的值為false。 這樣子,程式在 ...
  • 1,同步電腦時間和北京時間 2,設置path地址為需要搶券的地址和搶券時間 搶券地址--> 搶券地址(註意不要漏掉http://或者https://) --> 搶券時間 時分 秒 3,點擊... ...
  • 之前 ,有想做一個文件管理頁面。 參考了 許多資料,終於完成了一個基於Asp.net MVC 的文件管理Demo.界面如下。 一,實現功能及相關技術 文件管理Demo基於Asp.NET MVC ,主要實現了 文件列表瀏覽,文件夾創建與刪除,文件夾以及文件重命名,文件與文件夾的複製、剪切、壓縮,文件與 ...
  • .net core已經發佈了2.0版本,相對於1.0的有了很大的完善,最近準備在項目中嘗試使用asp.net core,所以就進行了一些簡單的研究。 初識asp.net core分為以下幾個部分: 1、.net core SDK以及vs2017下載安裝 2、創建asp.net core項目 3、初識 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...