C# 在媒体库windows phone 8.1中保存照片

C# 在媒体库windows phone 8.1中保存照片,c#,xaml,windows-phone-8.1,C#,Xaml,Windows Phone 8.1,我从列表视图中获取照片路径,并在详细屏幕中显示图像。 详细页面代码在这里 //Imaged is my image control in Xaml. protected override void OnNavigatedTo(NavigationEventArgs e) { var imagePath = e.Parameter as string; imaged.Source = new BitmapImage(new Uri(imagePath

我从列表视图中获取照片路径,并在详细屏幕中显示图像。 详细页面代码在这里

 //Imaged  is my image control in Xaml.

 protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        var imagePath = e.Parameter as string;
        imaged.Source = new BitmapImage(new Uri(imagePath, UriKind.RelativeOrAbsolute));


        var imgsource = imaged.Source;
    }
我想通过单击“保存”按钮事件将此图片保存到媒体库中

这是我的保存按钮事件代码

    private async void ApplicationBarIconButton_Click_SaveToPictures(object sender, RoutedEventArgs e)
    {

        FileSavePicker picker = new FileSavePicker();

           // picker.FileTypeChoices.Add("PNG File", new List<string>() { ".png" });
            picker.FileTypeChoices.Add("JPEG image", new string[] { ".jpg" });
            picker.FileTypeChoices.Add("PNG image", new string[] { ".png" });
            picker.FileTypeChoices.Add("BMP image", new string[] { ".bmp" });
            picker.DefaultFileExtension = ".png";



            picker.SuggestedFileName = "bomdiaimg";
            picker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;

            StorageFile file = await picker.PickSaveFileAsync();
           // StorageFile file = await picker.PickSaveFileAndContinue();
            if (file != null) 
            { 
               RenderTargetBitmap renderTargetBitMap = new RenderTargetBitmap();  



            await  renderTargetBitMap.RenderAsync(imaged, (int)imaged.Width, (int)imaged.Height); 

            var pixels = await renderTargetBitMap.GetPixelsAsync();



            using (IRandomAccessStream randomAccessStream = await file.OpenAsync(FileAccessMode.ReadWrite))  
             { 
                  var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, randomAccessStream);  
                  byte[] bytes = pixels.ToArray();  
                  encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)renderTargetBitMap.PixelWidth, (uint)renderTargetBitMap.PixelHeight, 96, 96, bytes); await encoder.FlushAsync();  
             }
            }

    }
有时,此方法下的绿线表示使用picksavefile并继续,但当我使用此方法时,将显示错误。不能理解这个问题。如何在媒体库中保存图片

SaveJpeg方法是命名空间System.Windows.media.Imaging.Extensions中的扩展方法。在源文件顶部添加一个using:

using System.Windows.Media.Imaging.Extensions;

而且,您可能打算使用System.Windows.Media.Imaging.WriteableBitmap而不是Windows.UI.Xaml.Media.Imaging.WriteableBitmap?

您可能希望使用RenderTargetBitMap保存控制图像。请检查此示例代码

FileSavePicker picker = new FileSavePicker(); 
picker.FileTypeChoices.Add("JPG File", new List<string>() { ".jpg" });  
 StorageFile file = await picker.PickSaveFileAsync(); if (file != null) 
{ 
   RenderTargetBitmap renderTargetBitMap = new RenderTargetBitmap();  
//With this method we can make our XAML elements in an image. await       


renderTargetBitMap.RenderAsync(grdRender, (int)grdRender.Width, (int)grdRender.Height); 

var pixels = await renderTargetBitMap.GetPixelsAsync();



using (IRandomAccessStream randomAccessStream = await file.OpenAsync(FileAccessMode.ReadWrite))  
 { 
      var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, randomAccessStream);  
      byte[] bytes = pixels.ToArray();  
      encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)renderTargetBitMap.PixelWidth, (uint)renderTargetBitMap.PixelHeight, 96, 96, bytes); await encoder.FlushAsync();  
 }
}

如果您正在寻找将图像保存到文件的方法,则可以帮助您。没有帮助。。你能用我的密码给我准确的答案吗?不,无法解决这个问题。主题是使用SaveJpeg保存图片。是的,这就是我试图帮助您解决的问题。。。是否可以使用System.Windows.Media.Imaging.WriteableBitmap而不是Windows.UI.Xaml.Media.Imaging.WriteableBitmap?我猜您从某处获取了一些示例代码,但找不到SaveJpeg方法。该方法适用于System.Windows.Media.Imaging.WriteableBitmap。我无法获取此引用。无法通过添加引用获取此信息是。。我得到了这个示例代码,希望在我的测试appExtensions中实现相同的功能。SaveJpeg位于库Microsoft.Phone中。System.Windows.Media.Imaging.WriteableBitmap位于程序集System.Windows中。你的项目中有那些参考资料吗?项目的具体类型是什么?windows phone 8.1,通用应用程序,便携式类库上述代码不起作用,我必须从列表视图中给出我自己的图片。?对于作为控件的imaged,此代码将出现例外情况。这里您可以看到一个示例代码StorageFile file=await picker.PickSaveFileAsync;此行创建异常,我无法获取解决方案。注释中的上述示例适用于windows
FileSavePicker picker = new FileSavePicker(); 
picker.FileTypeChoices.Add("JPG File", new List<string>() { ".jpg" });  
 StorageFile file = await picker.PickSaveFileAsync(); if (file != null) 
{ 
   RenderTargetBitmap renderTargetBitMap = new RenderTargetBitmap();  
//With this method we can make our XAML elements in an image. await       


renderTargetBitMap.RenderAsync(grdRender, (int)grdRender.Width, (int)grdRender.Height); 

var pixels = await renderTargetBitMap.GetPixelsAsync();



using (IRandomAccessStream randomAccessStream = await file.OpenAsync(FileAccessMode.ReadWrite))  
 { 
      var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, randomAccessStream);  
      byte[] bytes = pixels.ToArray();  
      encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)renderTargetBitMap.PixelWidth, (uint)renderTargetBitMap.PixelHeight, 96, 96, bytes); await encoder.FlushAsync();  
 }
}