【问题标题】:While Rendering Canvas control in Png I lost the background image在 Png 中渲染画布控件时,我丢失了背景图像
【发布时间】:2015-05-28 09:28:28
【问题描述】:

我的应用程序是一个 Windows 8 商店应用程序。它用相机拍照,然后我在图像上绘制,我想保存图像和绘图。我得到的结果只是图纸。我丢失了背景图片。 下面是我的实现:

XAML 代码: (我没有为拍摄的照片设置一个 Image 控件和一个用于绘图的画布,而是将 photo = CurrentPicture 绑定为画布的背景)

 <Canvas Grid.Row="1"
                    Grid.Column="0"
                    x:Name="InkCanvas"
                    Background="{Binding CurrentPicture, Converter={StaticResource WPhotoToCanvasBackgroundConverter}}"
                    VerticalAlignment="Center"
                    HorizontalAlignment="Left"
                    Margin="0"
                    Width="1024"
                    Height="768" />

C#:

        private async Task<IPhoto> RenderCanvasToPNG()
    {
        MemoryStream stream = await WriteableBitmapRenderExtensions.RenderToPngStream(InkCanvas);
        var bitmap = new BitmapImage();
        await bitmap.SetSourceAsync(System.IO.WindowsRuntimeStreamExtensions.AsRandomAccessStream(stream));
        byte[] byteme = stream.ToArray();
        var photo = new WPhotos(null, byteme, bitmap.PixelWidth, bitmap.PixelHeight, bitmap);
        return photo;
    }

非常感谢您的宝贵时间:)

【问题讨论】:

    标签: c# xaml windows-store-apps winrt-xaml


    【解决方案1】:

    没有直接的方法可以从 BitmapImage 或 ImageBrush 中提取像素。我相信 WriteableBitmapEx 通过查找图像的源 URI 并进行查找来伪造这一点,但这种方法仅在图像是从 URI 加载的情况下才有效。如果它被流式传输到图像中,则无法提取它。

    相反,您可以使用RenderTargetBitmap 将您的 UIElements 呈现为位图。由于它使用 Xaml 渲染引擎,因此它可以访问用于 Canvas 的背景的 ImageBrush,并且应该完全渲染 Canvas 及其内容(除非不可渲染的内容,例如 MediaElement 或 SwapChainPanel)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-12
      • 2013-02-16
      • 2014-01-04
      • 1970-01-01
      • 1970-01-01
      • 2018-01-16
      • 2013-08-31
      • 1970-01-01
      相关资源
      最近更新 更多