我有一個非常簡單的RenderTargetBitmap.RenderAsync重載混淆WebView縮放的情況。所有我MainPage執行是一個web視圖和一個按鈕:RenderTargetBitmap混淆了WebView縮放
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<WebView Source="http://bing.com"></WebView>
<Button Content="Render me"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Click="ButtonBase_OnClick" />
</Grid>
在後面的代碼有隻有一個簡單的事件處理程序
private async void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
RenderTargetBitmap rtb = new RenderTargetBitmap();
await rtb.RenderAsync(this, 1280, 720);
}
這是頁面的樣子RenderAsync呼叫前:
,這是調用後會發生什麼:
任何想法爲什麼以及如何防止這種情況?請注意,它只能發生,如果我叫
await rtb.RenderAsync(this, 1280, 720);
但如果我所說的過載而不縮放
await rtb.RenderAsync(this);
編輯:由於我收到的第一個答案,我想澄清爲什麼長寬比在這裏不是問題,但僅用於證明實際存在問題的目的。想想下面的場景 - 非常高的DPI屏幕,只需要一個較低分辨率的屏幕截圖 - 即使你用RIGHT比例縮小它,它仍然會弄亂WebView。此外,對於我的情況,之後手動調整屏幕截圖的大小並不是一個選項 - 縮放尺寸的RenderAsync重載要快得多,我真的更喜歡使用該方法。
當然這是一個錯誤,唯一的解決方法是一個小閃爍的東西 MainWebView.Visibility = Visibility.Collapsed; 等待Task.Delay(10); MainWebView.Visibility = Visibility.Visible; –
@JuanPabloGarciaCoello謝謝,你和Pieter都提出了類似的解決方案。 :) –
爲什麼手動調整位圖大小不適合你?如果你從前臺(不是'XamlRenderingBackgroundTask'),你可以使用像Win2D這樣的GPU加速方法來快速完成它。 – r2d2rigo