Итак, я передаю формы 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;
}
Я получаю nativeView как нулевое значение каждый раз в CaptureView, даже если у меня есть представление в нем, а средство визуализации не равно нулю.
Я пытаюсь захватить представление и вернуть его изображение в виде байта [], который я ' Позже я преобразую в источник изображений и поместите его в поле зрения