繁体   English   中英

将照片保存在媒体库Windows Phone 8.1中

[英]Save Photo in media library 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, 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();  
             }
            }

    }

我无法保存图片,错误是

这里的错误是一个例外。

      StorageFile file = await picker.PickSaveFileAsync();

SOme在此方法下显示绿线“表明使用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();  
 }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM