C# 将可视元素保存到文件

C# 将可视元素保存到文件,c#,windows-phone-8.1,C#,Windows Phone 8.1,我试图通过以下方式将框架元素保存到文件中: 异步任务SaveVisualElementToFile(FrameworkElement元素,StorageFile) { element.Width=element.ActualWidth; 元素高度=元素实际高度; //字符串fileName=“customphoto.jpg”; var renderTargetBitmap=新建renderTargetBitmap(); 等待renderTargetBitmap.RenderAsync(eleme

我试图通过以下方式将框架元素保存到文件中:

异步任务SaveVisualElementToFile(FrameworkElement元素,StorageFile) { element.Width=element.ActualWidth; 元素高度=元素实际高度; //字符串fileName=“customphoto.jpg”; var renderTargetBitmap=新建renderTargetBitmap(); 等待renderTargetBitmap.RenderAsync(element,(int)element.Width,(int)element.Height); var pixels=await renderTargetBitmap.GetPixelsAsync(); 使用(irandomaccesstream=await file.OpenAsync(FileAccessMode.ReadWrite)) { var编码器=等待 CreateAsync(BitmapEncoder.JpegEncoderId,流); 字节[]字节=像素。ToArray(); 编码器.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode。忽略, (uint)element.Width,(uint)element.Height, 96, 96, 字节); 等待编码器。FlushAsync(); } } 但结果并不像预期的那样。下面是一个例子:

原始图像:

保存的图像:


我的代码怎么了?

你的方法很好,只有像素因为不正确的宽度/高度而移位。您所要做的就是使用
renderTargetBitmap.PixelHeight
而不是
element.Height
。有问题的代码应该如下所示:

encoder.SetPixelData(BitmapPixelFormat.Bgra8,
BitmapAlphaMode。忽略,
(uint)renderTargetBitmap.PixelWidth,
(uint)renderTargetBitmap.PixelHeight,
96,96,字节);