2013-07-28 2 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 .. так что человек может читать все изображения в библиотеке и отправлять их на сервер! Я думал, что пользователь намеренно должен выбрать изображение 'tasks' – Shi

+0

@Shi Я никогда не пробовал обращаться к имени файла, которое возвращается, не передавая его в ShareMediaTask, поэтому не уверен, что у вас есть разрешение на его чтение без запроса разрешения. –

+0

получение фотографий, музыки и видео не слишком сложно. спасибо @Joachim это сработало, но я думаю, что я должен проверить разрешения всех приложений на моем телефоне тоже :( – Shi

0

Для совместного использования снимка экрана не требуется сохранение изображения, в окнах 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); 
} 
Смежные вопросы