0

我使用這個代碼寫一個文件BMP內的字節數組:從字節數組創建的BitmapImage和圖像對象上顯示它UWP樹莓裨3

private async void ScriviBMP() 
    { 
     using (Stream stream = immagineBitmap.PixelBuffer.AsStream()) 
     { 
      await stream.WriteAsync(arrayImmagine, 0, arrayImmagine.Length); 
     } 
     StorageFolder folder = KnownFolders.PicturesLibrary; 
     if (folder != null) 
     { 
      StorageFile file = await folder.CreateFileAsync("area2_128x128" + ".bmp", CreationCollisionOption.ReplaceExisting); 
      using (var storageStream = await file.OpenAsync(FileAccessMode.ReadWrite)) 
      { 
       var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.BmpEncoderId, storageStream); 
       var pixelStream = immagineBitmap.PixelBuffer.AsStream(); 
       var pixels = new byte[pixelStream.Length]; 
       await pixelStream.ReadAsync(pixels, 0, pixels.Length); 
       encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)immagineBitmap.PixelWidth, (uint)immagineBitmap.PixelHeight, 48, 48, pixels); 
       await encoder.FlushAsync(); 
      } 
     } 
    } 

然後我使用這代碼在圖像對象中顯示BMP圖像

private async void VisBMP() 
    { 
     var file = await KnownFolders.PicturesLibrary.GetFileAsync("area2_128x128.bmp"); 
     using (var fileStream = (await file.OpenAsync(Windows.Storage.FileAccessMode.Read))) 
     { 
      var bitImg = new BitmapImage(); 
      //bitImg.UriSource = new Uri(file.Path); 
      bitImg.SetSource(fileStream); 
      image.Source = bitImg; 
     } 
    } 

這些函數花費大約400毫秒來完成該過程,這是很多時間。 有沒有辦法避免使用BMP文件,只使用流在圖像對象上顯示圖像? 調試程序可能會減慢進程速度?我使用Visual Studio 2015年

+1

'immagineBitmap'是一個WriteableBitmap嗎?然後,您可以直接將其分配給圖像控件的Source屬性,如'image.Source = immagineBitmap;' – Clemens

回答

0

可以在InMemoryRandomAccessStream傳輸數據緩衝器(arrayImmagine)圖像約200ms.I與下面的代碼段測試。這些代碼進行。另外,您可以參考此article以獲取更多信息。

 BitmapImage biSource = new BitmapImage(); 
     using (InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream()) 
     { 
      await stream.WriteAsync(bytes.AsBuffer()); 
      stream.Seek(0); 
      await biSource.SetSourceAsync(stream); 
     } 

     image.Source = biSource; 
+0

雖然這是真的,但它仍然看起來完全是多餘的。 OP肯定可以直接將它們的WriteableBitmap分配給Image的Source。 – Clemens

+0

我試過直接將WriteableBitmap分配給圖像的源,但無法正確顯示圖像。 –