BitmapSource
表示具備特定大小和分辨率的單個不變的像素集。算法
- BitmapSource 多是解碼器提供的圖像文件中的單個幀,或者多是在它本身的 BitmapSource 上執行轉換的結果。 BitmapSource 不用於表示多幀圖像或動畫。
- 自己支持位圖 (BMP)、圖形交換格式 (GIF)、聯合圖像專家組 (JPEG)、可移植網絡圖形 (PNG) 和標記圖像文件格式 (TIFF) 圖像的壓縮和解壓縮。
- 對於位圖解碼方案,BitmapSource 基於用戶系統上已安裝的編解碼器使用自動編解碼器發現。圖像的最大高度和寬度爲 2^16 像素(每通道 32 位 * 4 通道)。 BitmapSource 的最大大小爲 2^32 個字節(64 GB),而且最大的圖像大小爲 4 千兆像素。 最小的圖像大小爲 1x1。
BitmapFrame 類:表示由解碼器返回並被編碼器接受的圖像數據。緩存
- 經過提供對與圖像特定框架關聯的 Thumbnail 的訪問,BitmapFrame 可提供未經 BitmapSource 定義的附加功能。 BitmapFrame 還支持經過使用 Metadata 屬性或 $ CreateInPlaceBitmapMetadataWriter 方法的元數據信息寫入。
- 從解碼器返回的全部 BitmapFrame 將始終凍結。 若是須要可修改副本,則必須先使用 Clone 方法建立 BitmapFrame 的副本。
- 只有標記圖像文件格式 (TIFF) 和圖形交換格式 (GIF) 格式圖像支持多個幀。
BitmapImage 類:提供一個經優化以使用XAML上載圖像的專用 BitmapSource。網絡
- 爲還沒有由 BitmapSource 定義的位圖加載引入附加屬性。
- BitmapImage 實現 ISupportInitialize 接口,以對多個屬性的初始化進行優化。 只能在對象初始化過程當中進行屬性更改。 調用 BeginInit 以表示初始化開始;調用 EndInit 以表示初始化結束。 初始化後,將忽略屬性更改。
- 使用 BitmapImage 構造函數建立的 BitmapImage 對象將自動初始化,且將忽略對屬性的更改。
CachedBitmap 類:爲 BitmapSource 提供緩存功能。多線程
- BitmapSource 不會自動緩存位圖數據。 在須要對單個位圖執行多個操做(例如剪裁或縮放圖像)的狀況下,使用 CachedBitmap 能夠提升性能。
ColorConvertedBitmap 類:更改 BitmapSource 的顏色空間。框架
- ColorConvertedBitmap 實現 ISupportInitialize 接口,以對多個屬性的初始化進行優化。 只能在對象初始化過程當中進行屬性更改。 調用 BeginInit 以表示初始化開始;調用 EndInit 以表示初始化結束。 初始化後,將忽略屬性更改。
- 使用 ColorConvertedBitmap(BitmapSource, ColorContext, ColorContext, PixelFormat) 構造函數建立的 ColorConvertedBitmap 對象將自動初始化,而且將忽略屬性更改。
- ColorConvertedBitmap 從不緩存。
CroppedBitmap 類:裁剪一個 BitmapSource。異步
- CroppedBitmap 實現 ISupportInitialize 接口,使用 CroppedBitmap(BitmapSource, Int32Rect) 構造函數建立的 CroppedBitmap 對象將自動初始化,且屬性沒法更改。
- 若是在應用轉換後將圖像保存到文件,則必須更新與圖像數據相關的元數據標記。
- 使用此類的 SourceRect 屬性定義要裁剪的位圖區域。
FormatConvertedBitmap 類:爲 BitmapSource 提供像素格式轉換功能。函數
- FormatConvertedBitmap 實現 ISupportInitialize 接口,構造函數建立的 FormatConvertedBitmap 對象會自動初始化,而且將忽略屬性更改。
- 對於在 RGB 顏色空間之間具備不一樣特徵的格式轉換,應當使用 ColorConvertedBitmap 類。 顏色空間之間的轉換須要域映射的源顏色配置配件和目標顏色配置文件,以提供可靠的顏色轉換。 顏色配置文件由 ColorConvertedBitmap 的 ColorContext 參數提供或由 DestinationColorContext 和 SourceColorContext 屬性提供。
- 若是在應用轉換後將圖像保存到文件,則必須更新與圖像數據相關的元數據標記。
RenderTargetBitmap 類:將 Visual 對象轉換爲位圖。工具
- 如 RenderTargetBitmap 將文本呈現爲圖像。drawingContext.DrawText()》RenderTargetBitmap.Render()》Image.Source
TransformedBitmap 類:縮放並旋轉 BitmapSource。性能
- 僅支持正交轉換,如 90° 增量旋轉轉換和縮放轉換。 不支持扭曲圖像的轉換。
- 實現 ISupportInitialize 接口,以對多個屬性的初始化進行優化。 只能在對象初始化過程當中進行屬性更改。 調用 BeginInit 以表示初始化開始;調用 EndInit 以表示初始化結束。 初始化後,將忽略屬性更改。
WriteableBitmap 類:提供一個可寫入並可更新的 BitmapSource。優化
- 使用 WriteableBitmap 類基於每一個框架來更新和呈現位圖。 這對於生成算法內容(如分形圖像)和數據可視化(如音樂可視化工具)頗有用。
- WriteableBitmap 類使用兩個緩衝區。 「後臺緩衝區」在系統內存中分配,它能夠累計當前未顯示的內容。 「前臺緩衝區」在系統內存中分配,它包含當前顯示的內容。 呈現系統將前臺緩衝區複製到視頻內存中以便顯示。
- UI 線程將內容寫入後臺緩衝區。 呈現線程從前臺緩衝區讀取內容,而後將其複製到視頻內存中。 將使用更改的矩形區域跟蹤對後臺緩衝區的更改。
-
調用 WritePixels 重載之一來自動更新和顯示後臺緩衝區中的內容。若要更好地控制更新,以及對後臺緩衝區進行多線程訪問,請使用如下工做流程。
- 調用 Lock 方法爲更新保留後臺緩衝區。
- 經過訪問 BackBuffer 屬性得到指向後臺緩衝區的指針。
- 將更改寫入後臺緩衝區。 當 WriteableBitmap 鎖定時,其餘線程可能將更改寫入後臺緩衝區。
- 調用 AddDirtyRect 方法,以指示已更改的區域。
- 調用 Unlock 方法,以釋放後臺緩衝區並容許呈現到屏幕上。
- 當更新被髮送到呈現線程時,呈現線程將更改的矩形從後臺緩衝區複製到前臺緩衝區。 呈現系統對此交換加以控制,以避免發生死鎖和重繪僞影,如「拆開」。
BitmapDecoder 類:表示位圖幀的一個容器。 每一個位圖幀都是 BitmapSource。 此抽象類爲全部派生解碼器對象提供一組基本功能。
- 容器中的每一個 BitmapFrame 均可能具備不一樣的特性,包括不一樣的大小、分辨率或調色板等等。
- 除非已選擇特定的編解碼器,不然WPF將使用自動運行時發現來識別圖像格式並將其與相應的編解碼器匹配。此發現過程容許系統自動發現 獨立軟件供應商 (ISV) 開發的編碼解碼器。
BmpBitmapDecoder、GifBitmapDecoder、IconBitmapDecoder、JpegBitmapDecoder、PngBitmapDecoder、TiffBitmapDecoder。
LateBoundBitmapDecoder 類:定義一個要求延遲位圖建立的解碼器,例如異步圖像下載。
- 若是指定了 DelayCreation,則使用 LateBoundBitmapDecoder。 Decoder 屬性會根據需求建立所需的「實際解碼器」。 正在下載內容時,全部解碼器屬性將返回 null。
- 應用程序可檢查 IsDownloading 屬性或爲 DownloadCompleted 事件添加委託以監視下載狀態。 此外,正在下載圖像時任何從 LateBoundBitmapDecoder 獲取的幀將返回寬高比 1,1,直至幀下載完畢。
WmpBitmapDecoder 類:爲 Microsoft Windows Media 照片編碼圖像定義一個解碼器。
- Microsoft Windows Media 照片是一個新的編解碼器,與 JPEG 相比,它具備更多功能,能提供更佳的圖像保真度,並可減少文件的大小。
- Microsoft Windows Media 照片是一個新的編解碼器,與 JPEG 相比,它具備更多功能,能提供更佳的圖像保真度,並可減少文件的大小。
BitmapMetadata 類:提供對從位圖圖像中讀取元數據以及將元數據寫入位圖圖像的支持。
- 與圖像關聯的元數據是描述圖像(但不必定會顯示圖像)的數據。 每種支持的位圖圖像格式都採用不一樣的方式處理元數據,但讀取和寫入元數據的功能相同。
- 若是 BitmapMetadata 是由經過使用 BitmapDecoder 獲取的 BitmapFrame 公開的,則默認狀況下它是隻讀的,而且可變操做將引起異常。 若是它是由包裝另外一個 BitmapSource 的 BitmapFrame 公開的,則它在構造上是可變的。
- 能夠使用 SetQuery 和 GetQuery 方法來構造和讀取元數據查詢。
InPlaceBitmapMetadataWriter 類:啓用對 BitmapMetadata 的現有塊的就地更新。
- 若是 BitmapMetadata 不與經過 BitmapDecoder 得到的 BitmapFrame 關聯,則使用就地編寫器寫入元數據的嘗試將失敗。 成功的寫入操做會將元數據經過解碼器直接應用到圖像流。
- 若是嘗試寫入給定位圖格式不支持的元數據,則就地元數據更新將失敗。
- 若要執行就地元數據編輯,必須使用 Default 或 OnDemand 緩存選項對位圖進行解碼。 OnLoad 不保證可以得到對就地元數據編輯所需的元數據流的訪問。