我正在制作适用于Windows 8.1的应用,其中重要的是能够放大并详细检查图像。如果我只是打开位图并放大它看起来像。
然而,当我将图像加载到我的应用程序并使用ScrollViewer进行放大时,我得到了。
因为它似乎试图为某种抗锯齿插入像素值。
我如何才能获得它,以便在我放大时显示(尽可能)图像的确切像素?特别是我使用图像作为滚动查看器中包含的画布的背景。
我在这里和MSDN环顾四周,发现了一对相关的问题,但是他们似乎还没有解决我的确切问题。
答案 0 :(得分:1)
没有简单的方法可以解决这个问题,最好的选择是使用DirectX渲染图像,以便减轻WinRT自动插值像素值的影响。
作为someone explained on MSDN并基于此outstanding request,我无法通过其他方式来实现此目标。
Win2D是WinRT的DirectX inter-op库。使用此功能,您可以以更大的尺寸渲染图像,然后将scrollViewier的默认缩放级别设置得非常小。因此,当你放大它时,你可以看到没有任何模糊/模糊插值的单个像素,因为你实际上会看到64像素左右的组都是一种颜色。我无法找到任何方法来实际覆盖什么样的插值,所以这似乎是最好的方法。
设置画布和绘图事件,并使用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。