2016-06-09 81 views
2

共享濾波圖像我有一個圖像處理窗口10的應用程序。我在該圖像上應用濾鏡並在圖像元素上顯示。這就是我應用過濾器並將其設置爲MainImage元素的來源。如何UWP C#

ProcessImage processImage = new ProcessImage(sourcePixels, width, height); 

     byte[] blurEffect = processImage.BlurEffect(width, height); 

     WriteableBitmap blurImage = new WriteableBitmap((int)width, (int)height); 
     using (Stream stream = blurImage.PixelBuffer.AsStream()) 
     { 
      await stream.WriteAsync(blurEffect, 0, blurEffect.Length); 
      MainImage.Source = blurImage; 
     } 

到目前爲止,我已經將WriteableBitmap圖像設置爲源。現在我想用DataTransferManager的數據請求的事件來分享這個圖像,如圖

dataTransferManager = DataTransferManager.GetForCurrentView(); 
     dataTransferManager.DataRequested += DataTransferManager_DataRequested; 

的事件包含此代碼

DataPackage dataPackage = args.Request.Data; 
     dataPackage.Properties.Title = "App Name"; 
     dataPackage.Properties.Description = "My description"; 

     dataPackage.SetBitmap(); 

分享按鈕點擊事件的身體,我很喜歡這個

調用showshareUI
DataTransferManager.ShowShareUI(); 

我想分享圖像使用上面的第四行是SetBitmap方法,但這裏的問題是這種方法想要隨機AccessStreamReference值,我有一個過濾圖像類型writeablebitmap。我怎樣才能完成這件事?

回答

1

你可以寫你的WriteableBitmap的一個InMemoryRandomAccessStream

我沒有訪問我的dev的機器,所以我不能測試,但這裏有一個快速的示例:

private async Task<IRandomAccessStream> Convert(WriteableBitmap writeableBitmap) 
    { 
     var stream = new InMemoryRandomAccessStream(); 

     BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, stream); 
     Stream pixelStream = writeableBitmap.PixelBuffer.AsStream(); 
     byte[] pixels = new byte[pixelStream.Length]; 
     await pixelStream.ReadAsync(pixels, 0, pixels.Length); 

     encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)writeableBitmap.PixelWidth, (uint)writeableBitmap.PixelHeight, 96.0, 96.0, pixels); 
     await encoder.FlushAsync(); 

     return stream; 
    } 

由於dataPackage.SetBitmap()預計一RandomAccessStreamReference對象,您需要根據上述方法返回的IRandomAccessStream獲取一個對象。幸運的是,這很容易:

var streamRef = RandomAccessStreamReference.CreateFromStream(stream) 

希望工程。

+0

接收後面的流,並將其設置爲dataPackage.SetBitmap(流)之後;它顯示一個錯誤,「無法從System.Threading.Tasks.Task <...>轉換爲Window.Storage.Streams.MemoryAccessStreamReferece –

+0

請確保您在調用它時等待該方法。即stream = await Convert(...) – AlexDrenea

+0

雅,這樣做,現在我通過結果dataPackage.SetBitmap(結果),它說不能轉換從IRandomAccessStream到RandomAccessStreamReference。 –