2013-07-28 33 views
0

我想分享在Twitter,Facebook等應用程序的屏幕截圖。這是我的代碼:它保存圖片,但不打開共享媒體任務。我知道問題出在路徑上:{如何分享截圖?

var wb = new WriteableBitmap(LayoutRoot, new TranslateTransform()); 
using (var mediaLibrary = new MediaLibrary()) { 
    using (var stream = new MemoryStream()) { 
    var fileName = string.Format("{0}.jpg", DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss")); 
    wb.SaveJpeg(stream, wb.PixelWidth, wb.PixelHeight, 0, 100); 
    stream.Seek(0, SeekOrigin.Begin); 
    mediaLibrary.SavePicture(fileName, stream); 
    shareMediaTask = new ShareMediaTask(); 
    shareMediaTask.FilePath = fileName; 
    shareMediaTask.Show(); 
    } 
} 

如何獲取保存的圖片的路徑?

難道只是簡單地截圖並共享它而不保存在手機上嗎?

回答

0

爲了獲得MediaLibrary文件的真實路徑,您需要使用GetPath()擴展方法,類似於;

using Microsoft.Xna.Framework.Media.PhoneExtensions; 

... 

var picture = mediaLibrary.SavePicture(fileName, stream); 
shareMediaTask = new ShareMediaTask(); 
shareMediaTask.FilePath = picture.GetPath(); 
shareMediaTask.Show(); 
+0

Ooo ..所以這樣一個人可以讀取庫中的所有圖像並將其發送到服務器!我以爲用戶有意應該選擇'任務' – Shi

+0

@Shi我從來沒有試圖訪問文件名,而不會將它給予ShareMediaTask,因此不確定您是否有權讀取它,而不需要獲得許可。 –

+0

獲取照片,音樂和視頻許可不是太難。謝謝@Joachim它的工作,但我想我應該檢查我的手機上的所有應用程序的權限:( – Shi

0

對於共享屏幕截圖,不需要保存圖像,在Windows 8.1中很容易。

這是代碼,盡情享受吧!

async void dataTransferMgr_DataRequested(DataTransferManager sender, DataRequestedEventArgs args) 
     { 
      DataRequest request = args.Request; 
      request.Data.Properties.Title = "Title"; 
      request.Data.Properties.Description = "brief description"; 
      request.Data.SetText("detailed information"); 


      RandomAccessStreamReference imageStreamRef = await ScreenshotToStreamReferenceAsync(yourChartControlName); 
      request.Data.Properties.Thumbnail = imageStreamRef; 
      request.Data.SetBitmap(imageStreamRef); 

     } 

private async Task ScreenshotToStreamAsync(FrameworkElement element, IRandomAccessStream stream) 
{ 
var renderTargetBitmap = new Windows.UI.Xaml.Media.Imaging.RenderTargetBitmap(); 
await renderTargetBitmap.RenderAsync(element); 

var pixelBuffer = await renderTargetBitmap.GetPixelsAsync(); 

var dpi = Windows.Graphics.Display.DisplayInformation.GetForCurrentView().LogicalDpi; 

var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream); 
encoder.SetPixelData(
BitmapPixelFormat.Bgra8, 
BitmapAlphaMode.Ignore, 
(uint)renderTargetBitmap.PixelWidth, 
(uint)renderTargetBitmap.PixelHeight, 
dpi, 
dpi, 
pixelBuffer.ToArray()); 

await encoder.FlushAsync(); 
} 

private async Task<RandomAccessStreamReference> ScreenshotToStreamReferenceAsync(FrameworkElement element) 
{ 
var ms = new InMemoryRandomAccessStream(); 
await ScreenshotToStreamAsync(element, ms); 
ms.Seek(0); 
return RandomAccessStreamReference.CreateFromStream(ms); 
}