C# 如何分享截图?

C# 如何分享截图?,c#,windows-phone-7,xaml,windows-phone-8,C#,Windows Phone 7,Xaml,Windows Phone 8,我想在Twitter、Facebook等网站上分享应用程序的截图。这是我的代码:它保存图片,但不打开共享媒体任务。我知道问题出在路径上:{ var wb = new WriteableBitmap(LayoutRoot, new TranslateTransform()); using (var mediaLibrary = new MediaLibrary()) { using (var stream = new MemoryStream()) { var fileName = s

我想在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();
  }
}
如何获取已保存图片的路径


难道不可能只拍摄一个屏幕截图并共享而不保存在手机上吗?

要获取MediaLibrary文件的真实路径,您需要使用扩展名方法,例如

using Microsoft.Xna.Framework.Media.PhoneExtensions;

...

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

要共享屏幕截图,无需保存图像,在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);
}
异步无效dataTransferMgr\u DataRequested(DataTransferManager发送方,DataRequestedEventArgs)
{
DataRequest=args.request;
request.Data.Properties.Title=“Title”;
request.Data.Properties.Description=“简要描述”;
request.Data.SetText(“详细信息”);
RandomAccessStreamReference imageStreamRef=等待屏幕快照以流引用同步(yourChartControlName);
request.Data.Properties.Thumbnail=imageStreamRef;
request.Data.SetBitmap(imageStreamRef);
}
私有异步任务ScreenshotToStreamAsync(FrameworkElement元素,irandomaccesstream)
{
var renderTargetBitmap=new Windows.UI.Xaml.Media.Imaging.renderTargetBitmap();
等待renderTargetBitmap.RenderAsync(元素);
var pixelBuffer=await renderTargetBitmap.GetPixelsAsync();
var dpi=Windows.Graphics.Display.DisplayInformation.GetForCurrentView().LogicalDpi;
var encoder=await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId,stream);
编码器.SetPixelData(
BitmapPixelFormat.Bgra8,
BitmapAlphaMode。忽略,
(uint)renderTargetBitmap.PixelWidth,
(uint)renderTargetBitmap.PixelHeight,
新闻部,
新闻部,
pixelBuffer.ToArray());
等待编码器。FlushAsync();
}
私有异步任务ScreenshotToStreamReferenceAsync(FrameworkElement)
{
var ms=新的InMemoryRandomAccessStream();
等待ScreenshotToStreamAsync(元素,毫秒);
Seek女士(0);
返回RandomAccessStreamReference.CreateFromStream(毫秒);
}

Ooo..这样一来,一个人就可以读取库中的所有图像并将其发送到服务器!我想用户应该通过
tasks
@Shi故意选择一张图片。我从未尝试访问一个人在未将其交给ShareMediaTask的情况下返回的文件名,因此不确定您是否有权在没有请求的情况下阅读它ng权限。获取照片、音乐和视频权限并不太难。谢谢@Joachim,这很有效,但我想我也应该检查手机上所有应用的权限:(