在Png中渲染画布控件时,我丢失了背景图像

时间:2015-05-28 09:28:28

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

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

XAML代码: (代替对拍摄的照片和画布进行图像控制,我将照片= 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;
    }

非常感谢您的时间:)

1 个答案:

答案 0 :(得分:0)

没有直接从BitmapImage或ImageBrush中提取像素的方法。我相信WriteableBitmapEx通过查找图像的源URI并查找它来伪造它,但此方法仅在从URI加载图像时才起作用。如果它被流式传输到图像中,则无法提取它。

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