【问题标题】:how to render canvas to bitmap excluding out of bounds elements (C# WinRT)如何将画布渲染到位图,不包括越界元素(C# WinRT)
【发布时间】:2014-06-25 16:09:08
【问题描述】:

我有一个简单的绘画应用程序,我正在尝试使用 RenderTargetBitmap.RenderAsync() 方法将画布渲染为位图。 如果画布的子元素超出画布边界,则渲染的位图大于画布区域......我怎样才能避免这种情况并只渲染边界内的元素? 我尝试了画布的 clip 属性,但它仅适用于 UI ,不适用于渲染。 ClipToBounds 在 WinRT 中不可用...

【问题讨论】:

    标签: c# canvas render bounds writeablebitmap


    【解决方案1】:

    我遇到了同样的问题。这对我有用:

            Rect r = new Rect(new Point(0, 0), new Point(canvas.Width, canvas.Height));
            foreach (var c in canvas.Children)
                c.Clip = new RectangleGeometry() { Rect = r };
    
    
            RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap();
            await renderTargetBitmap.RenderAsync(canvas, (int)canvas.Width, (int)canvas.Height);
    
            FileSavePicker picker = new FileSavePicker();
            picker.FileTypeChoices.Add("JPEG Image", new string[] { ".jpg" });
            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.JpegEncoderId, stream);
                    byte[] bytes = pixels.ToArray();
                    encoder.SetPixelData(BitmapPixelFormat.Bgra8,
                        BitmapAlphaMode.Ignore,
                        (uint)canvas.Width, (uint)canvas.Height,
                        96, 96, bytes);
    
                    await encoder.FlushAsync();
                }
            }
    

    基本上,您只需将 Clip 添加到 Canvas 的所有子项中,因此 RenderTargetBitmap 不会渲染所有超出范围的内容。


    ClipToBounds 功能可以通过 AttachedProperty 轻松添加:details

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-31
      相关资源
      最近更新 更多