![](/img/trans.png)
[英]How to get the ScrollViewer's VerticalOffset in dev independent pixels for an ItemsControl with CanContentScroll true
[英]How to get a ScrollViewer to zoom in to see individual pixels?
我正在為Windows 8.1開發一個應用程序,在該應用程序中能夠放大和詳細檢查圖像很重要。 如果我只是打開位圖並放大它的樣子。
但是,當我將圖像加載到應用程序中並使用ScrollViewer進行放大時,我得到了。
似乎正在嘗試插值像素值以進行某種抗鋸齒。
如何獲得它,以便在放大時顯示(盡可能)顯示圖像的確切像素? 特別是,我將圖像用作滾動查看器中包含的畫布的背景。
我環顧了這里和MSDN,發現了兩個相關的問題,但是到目前為止,它們似乎還沒有解決我的確切問題。
沒有簡單的方法可以解決此問題,最好的選擇是使用DirectX渲染更大的圖像,以便減輕WinRT自動插值像素值的影響。
正如有人在MSDN上解釋並基於此未解決的請求,我看不到任何其他方法可以實現此目的。
Win2D是WinRT的DirectX互操作庫。 這樣,您可以以更大的尺寸渲染圖像,然后將scrollViewier的默認縮放級別設置為很小。 因此,放大時似乎可以看到單個像素而沒有任何模糊/模糊插值,因為實際上您將看到一組64個像素左右的所有顏色。 我找不到任何方法來實際覆蓋完成哪種插值,所以這似乎是最好的方法。
設置您的畫布和draw事件,並使用DrawImage函數將圖像放大
<ScrollViewer x:Name="Scroller" ZoomMode="Enabled" MinZoomFactor="0.1" MaxZoomFactor="20"> <canvas:CanvasControl x:Name="canvas" Draw="canvas_Draw" CreateResources="create"/> </ScrollViewer>
在canvas_draw函數中。
canvas.Width = original.Width * 10;
canvas.Height = original.Height * 10;
args.DrawingSession.DrawImage(bitmap,new Rect(0,0,original.Width*10,original.Height*10), new Rect(0,0,original.Width,original.Height), 1.0f, CanvasImageInterpolation.NearestNeighbor);
在頁面構造函數中
Scroller.ZoomToFactor (0.1f);
我觀察到的其他無效方法
也可以使用某些圖像處理庫來簡單地將位圖放大10倍左右,然后再使用它,但最終我還是使用Win2D。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.