我的应用程序是一个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;
}
非常感谢您的时间:)
答案 0 :(得分:0)
没有直接从BitmapImage或ImageBrush中提取像素的方法。我相信WriteableBitmapEx通过查找图像的源URI并查找它来伪造它,但此方法仅在从URI加载图像时才起作用。如果它被流式传输到图像中,则无法提取它。
相反,您可以使用RenderTargetBitmap将您的UIElements渲染为位图。由于这使用了Xaml渲染引擎,因此它可以访问用于Canvas背景的ImageBrush,并且应该完全呈现Canvas及其内容(禁止不可渲染的内容,例如MediaElement或SwapChainPanel)。