none
wp8.1如何保存image控件为图片? RRS feed

  • 问题

  • 感谢帮助,我首先我把图片加载在image控件中,然后用下面语句把对img进行裁剪。

    img.Clip=rec;

    请问裁剪后的图片如何保存?

    网上搜到的用picturebox控件、WriteableBitmap类实现的都不行,大多是保存stream到图片的。感谢帮助!

    //用下面的方法可以保存图片,但图片为空,打不开)        
    async Task SaveVisualElementToFile(FrameworkElement element)
            {
                StorageFile file = await clippedFolder.CreateFileAsync(OutputTextBlock.Tag.ToString(), CreationCollisionOption.GenerateUniqueName);
    
                var renderTargetBitmap = new RenderTargetBitmap();
                await renderTargetBitmap.RenderAsync(element, (int)element.Width, (int)element.Height);
                var pixels = await renderTargetBitmap.GetPixelsAsync();
    
                using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite))
                {
                    var encoder = await
                        BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, stream);
                    byte[] bytes = pixels.ToArray();
                    encoder.SetPixelData(BitmapPixelFormat.Bgra8,
                                         BitmapAlphaMode.Ignore,
                                         (uint)element.Width, (uint)element.Height,
                                         96, 96, bytes);
    
                    await encoder.FlushAsync();
                }
            }
    按楼下说的已成功保存图片,但用clip来裁剪图片,再image控件得到的图片中被裁掉的部分是黑色填充,后来在windows sample里面找例程把保存图片的方法替换掉了,sample名称 : How to crop bitmap in a Windows Store app (C#)

    • 已编辑 chao cui 2015年5月10日 1:44
    2015年5月9日 7:29

答案

全部回复

  • 我用和你一模一样的代码,在wp8.1 rt程序里,在设备上调试生成的图片和你的不一样,如下。感谢帮助。


    • 已编辑 chao cui 2015年5月9日 11:15
    2015年5月9日 10:36
  • ?????
    • 已标记为答案 chao cui 2015年5月9日 13:03
    • 已编辑 Shi Xin 2015年7月27日 5:23
    2015年5月9日 11:34
  • ?????
    • 已标记为答案 chao cui 2015年5月9日 13:03
    • 已编辑 Shi Xin 2015年7月27日 5:23
    2015年5月9日 11:42
  • 按您说的把 这句代码替换掉就成功了,学习了,万分感谢!

    encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)renderTargetBitmap.PixelWidth, (uint)renderTargetBitmap.PixelHeight, 96.0, 96.0, pixels.ToArray());
      

    -------------------------------------------------------------------------------------------------------------------

    我自己再思考一下。。。我整理好后再回复,下面的请忽略

    我也在wp\win8.1其实都运行过,其实我的程序最终是要在win8.1上跑的。我在win8.1上可以保存rectangle、Ellipse,但当我传入的element是image时,保存的图片不是image控件里的图片,而是空的文件。麻烦你试试把你的程序里的Ellipse换成一个image控件试试。

    <Image  x:Name="imgTest" Source="ms-appx:///Assets/Logo.scale-100.png"/> 







    • 已编辑 chao cui 2015年5月9日 13:03
    2015年5月9日 12:18