簡體   English   中英

如何將BitmapFrame轉換為BitmapImage

[英]How to convert BitmapFrame into BitmapImage

我的程序使用一些WPF API來處理文件夾中的圖像。 我需要從圖像中解析EXIF數據(如果有)以便獲取DateTimeOriginal屬性的值。 我一直在使用BitmapImageMemoryStream加載圖像,但是我需要一個BitmapFrame對象來獲取BitmapMetadata對象。

這是在要求獲得DateTimeOriginal EXIF屬性之前的原始代碼:

BitmapImage src = new BitmapImage();
try {
    using ( MemoryStream memoryStream = new MemoryStream( snapshot.ImageData ) ) {
        src.BeginInit();
        src.CacheOption  = BitmapCacheOption.OnLoad;
        src.StreamSource = memoryStream;
        src.EndInit();
    }
} catch ( NotSupportedException ex ) {
    . . .
}

現在,要獲取BitmapFrame ,我需要創建一個BitmapDecoder並使用Frames[0]屬性。 因此,我在using語句之后添加了以下內容:

BitmapDecoder decoder = BitmapDecoder.Create( memoryStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad );

這將解碼位圖並獲取第一個Frame,這很酷。 我仍然需要創建BitmapImage 我可以通過將MemoryStream's位置重新設置為開始並保留已經存在的代碼來做到這一點,但這將再次解碼同一張圖像。

有沒有一種方法可以將BitmapFrame轉換為BitmapImage 我以為我可以將BitmapFrame轉換為BitmapSource對象,然后設置BitmapImage's Source Source屬性,但是BitmapImage類似乎沒有Source屬性。

這可能嗎? 如果是這樣,怎么做?

無需進行此轉換。 BitmapImage MSDN頁面中的“備注”部分顯示:

BitmapImage主要是為了支持可擴展應用程序標記語言(XAML)語法而存在的,並引入了BitmapSource未定義的其他位圖加載屬性。

使用位圖時,您的應用程序通常應始終使用BitmapSourceImageSource基類。 例如,當您分配WPF Image控件的Source屬性時,可以使用從ImageSource派生的任何類型的實例,因為這是Source屬性的類型。

因此,您可以直接使用BitmapFrame因為它也源自ImageSource

var bitmap = BitmapFrame.Create(
    memoryStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);

image.Source = bitmap;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM