将椭圆添加到图像并将其保存在Windows 8.1 APP中

时间:2014-10-08 11:19:04

标签: windows image store ellipse

我在Windows 8.1应用程序中编写了一个代码来裁剪图片并使用教程保存它

http://code.msdn.microsoft.com/windowsapps/CSWin8AppCropBitmap-52fa1ad7

现在我要编辑图片中添加椭圆形状的图片。为此,我创建了一个椭圆

 var Circle = new Ellipse
 {
        Height = 50,
        Width = 50,
        Fill = brush,
        RenderTransform = new CompositeTransform(),

 };

并将其添加到画布中,其中包含从计算机加载的上述图片:

 imageCanvas.Children.Add(Circle);

我可以看到椭圆加载在原始图片中,但保存时,只保存原始图片(不是椭圆)。我想编辑将椭圆嵌入原始图片的图片。我该怎么办?

1 个答案:

答案 0 :(得分:2)

我认为您正在保存图像,这就是为什么只保存图像而不保存图像上的圆圈。要用圆圈保存编辑过的图像,您需要保存CANVAS的孩子

假设您熟悉IRandomAccesStream和Encoder类,我在这里给出了我的代码,我有时会使用它的代码100%。在代码中,我还提供了FileSavePicker的功能,用户可以通过它将图片保存在所需的位置。在这里,can是画布的名称

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

        if (can != null)
        {
            RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap();
            await renderTargetBitmap.RenderAsync(can);


            FileSavePicker picker = new FileSavePicker();

            picker.FileTypeChoices.Add("PNG Image",new string[]{".png"});
            StorageFile file = await picker.PickSaveFileAsync();
            if (file != null)
            {
                var pixels = await renderTargetBitmap.GetPixelsAsync();

                using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite))
                {
               var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
                    byte[] bytes = pixels.ToArray();
                    encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)can.Width, (uint)can.Height, 96, 96, bytes);
                    await encoder.FlushAsync();
                }
             }
          }
    }