none
writeablebitmap保存中出现的问题 RRS feed

  • 问题

  • private async void SaveImage(WriteableBitmap src)
            {
                StorageFolder installedLocation = KnownFolders.PicturesLibrary;
                string name = DateTime.Now.ToString();
                foreach (char c in name)
                {
                    if (c >= 48 && c <= 57) Name += c;
                }
                var _Folder = KnownFolders.PicturesLibrary;
                var _Folder1 = await _Folder.CreateFolderAsync(Name, Windows.Storage.CreationCollisionOption.ReplaceExisting);
                var File = await _Folder1.CreateFileAsync(Name, Windows.Storage.CreationCollisionOption.ReplaceExisting);    
                try
                {

                    Guid encoderId= Windows.Graphics.Imaging.BitmapEncoder.JpegEncoderId;
                    using (IRandomAccessStream fileStream = await File.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite))
                    {
                        Windows.Graphics.Imaging.BitmapEncoder encoder = await Windows.Graphics.Imaging.BitmapEncoder.CreateAsync(encoderId, fileStream);

                        Stream pixelStream = src.PixelBuffer.AsStream();

                        byte[] pixels = new byte[pixelStream.Length];

                        pixelStream.Read(pixels, 0, pixels.Length);


                        for (int i = 0; i < pixels.Length; i += 4)
                        {

                            byte temp = pixels[i];

                            pixels[i] = pixels[i + 2];

                            pixels[i + 2] = temp;

                        }
                        //pixal format shouldconvert to rgba8

                        encoder.SetPixelData(Windows.Graphics.Imaging.BitmapPixelFormat.Rgba8, Windows.Graphics.Imaging.BitmapAlphaMode.Straight,
                            (uint)src.PixelWidth, (uint)src.PixelHeight, 96, 96, pixels);

                        await encoder.FlushAsync();
                    }

                }

                catch (Exception e)
                {

                    throw e;

                }

         这段代码在保存时产生一个没有后缀名没有内容的文件。为什么?其实我只是想实现保存writeablebitmap但是不使用FileSavePicker save = new FileSavePicker();就是不需要用户选择直接保存的功能。




    • 已编辑 Jweiwei 2013年7月4日 8:34
    2013年7月3日 15:34

答案

  •  string str = ".jpg";

     StorageFolder Folder1 = await installedLocation.CreateFolderAsync(Name, Windows.Storage.CreationCollisionOption.ReplaceExisting);

      Name += str;

     StorageFile imageFile = await Folder1.CreateFileAsync(Name, CreationCollisionOption.GenerateUniqueName);        这样就可以了。Name中需要包含类型

    • 已标记为答案 Jweiwei 2013年7月5日 3:42
    2013年7月5日 3:17

全部回复

  • 你的 应用清单中声明功能  有設定嗎 ?

    Windows 应用商店应用中的文件访问和权限

    至於檔名, 你可以用時間到毫秒來當檔名.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2013年7月3日 16:05
  • 设定了的。

    2013年7月4日 0:25
  •  string str = ".jpg";

     StorageFolder Folder1 = await installedLocation.CreateFolderAsync(Name, Windows.Storage.CreationCollisionOption.ReplaceExisting);

      Name += str;

     StorageFile imageFile = await Folder1.CreateFileAsync(Name, CreationCollisionOption.GenerateUniqueName);        这样就可以了。Name中需要包含类型

    • 已标记为答案 Jweiwei 2013年7月5日 3:42
    2013年7月5日 3:17
  • 可以了。谢谢。

    2013年7月5日 3:43