因此,我将Xamarin表单View作为参数传递给UWP中的依赖项服务,以对传递的View进行屏幕截图。
代码如下:
public async Task<byte[]> CaptureView(View view)
{
if (Platform.GetRenderer(view) == null)
{
Platform.SetRenderer(view, Platform.CreateRenderer(view));
}
var renderer = Platform.GetRenderer(view);
var nativeView = renderer?.GetNativeElement();
if(nativeView == null)
{
renderer?.SetElement(view);
nativeView = renderer?.GetNativeElement();
}
return await ReturnStream(nativeView);
}
private async Task<byte[]> ReturnStream(UIElement content)
{
var renderTargetBitmap = new RenderTargetBitmap();
await renderTargetBitmap.RenderAsync(content);
var pixelpuffer = await renderTargetBitmap.GetPixelsAsync();
var logicalDpi = DisplayInformation.GetForCurrentView().LogicalDpi;
IRandomAccessStream stream = new InMemoryRandomAccessStream();
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);
encoder.BitmapTransform.InterpolationMode = BitmapInterpolationMode.Fant;
encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight, (uint)renderTargetBitmap.PixelWidth, (uint)renderTargetBitmap.PixelHeight, logicalDpi, logicalDpi, pixelpuffer.ToArray());
await encoder.FlushAsync();
byte[] resultingBuffer = new byte[stream.Size];
await stream.ReadAsync(resultingBuffer.AsBuffer(), (uint)resultingBuffer.Length, InputStreamOptions.None);
return resultingBuffer;
}
即使我有View并且渲染器也不为null,我每次都会在CaptureView中将nativeView设置为null。
我试图捕获视图并将其图像作为字节返回[],稍后我将转换为imagesource并将其放置在视图中。