美文网首页
WPF放大镜效果

WPF放大镜效果

作者: czly | 来源:发表于2017-03-18 18:23 被阅读0次

在做WPF项目中,不止两个项目需要有放大镜功能。
第一个项目是一个手术室的远程示教系统,主要是为了方便专家演示病症时,可以放大图片上的某些部位。
第二个项目是一个工厂的MES项目,其中有个功能是质量预警,主要就是根据疵点图片,对比实物进行预警。可是疵点很小,这时就需要一个放大镜的功能。
效果如下:


image.png

下面我们来实现。
<pre>
<Grid x:Name="rootLayout">
<report:DevReport x:Name="rep" PreviewMouseMove="rep_PreviewMouseMove"/>
<Canvas>
<Canvas Name="magnifierCanvas" IsHitTestVisible="False">
<Ellipse Width="150" Height="150" StrokeThickness="3" Fill="LightBlue">
</Ellipse>
<Ellipse Width="150" Height="150" Name="magnifierEllipse">
<Ellipse.Fill>
<VisualBrush x:Name="vb" Visual="{Binding ElementName=rep}" Stretch="UniformToFill" ViewboxUnits="Absolute"
Viewbox="0,25,50,50" ViewportUnits="RelativeToBoundingBox" Viewport="0,0,1,1">
</VisualBrush>
</Ellipse.Fill>
</Ellipse>
</Canvas>
</Canvas>
</Grid>
</pre>
窗体上就放了一个报表组件,和一个放大镜。放大镜根据鼠标移动。
<pre>
private void rep_PreviewMouseMove(object sender, MouseEventArgs e)
{
Point rate = new Point(2, 2);
Point pos = e.MouseDevice.GetPosition(rootLayout); //相对于outsideGrid 获取鼠标的坐标
Rect viewBox = vb.Viewbox; //这里的Viewbox和前台的一样 这里就是获取前台Viewbox的值
double xoffset = 0; //因为鼠标要让它在矩形(放大镜)的中间 那么我们就要让矩形的左上角重新移动位置
double yoffset = 0;
xoffset = magnifierEllipse.ActualWidth / 2;
yoffset = magnifierEllipse.ActualHeight / 2;
viewBox.X = pos.X - xoffset + (magnifierEllipse.ActualWidth - magnifierEllipse.ActualWidth / rate.X) / 2;
viewBox.Y = pos.Y - yoffset + (magnifierEllipse.ActualHeight - magnifierEllipse.ActualHeight / rate.Y) / 2;
vb.Viewbox = viewBox;
Canvas.SetLeft(magnifierCanvas, pos.X - xoffset); //同理重新定位Canvas magnifierCanvas的坐标
Canvas.SetTop(magnifierCanvas, pos.Y - yoffset);
}
</pre>
其实最后放大效果并不好,放大镜的放大,其清晰度并没有提高,反而会模糊,如果是矢量图的话,显示效果不会随着缩放而降低。不过如果是文字的话,效果会好很多。

image.png
不过,最终这个项目,还是用的DEV报表组件的放大功能。
image.png
哈哈,效果不错。

相关文章

  • WPF放大镜效果

    在做WPF项目中,不止两个项目需要有放大镜功能。第一个项目是一个手术室的远程示教系统,主要是为了方便专家演示病症时...

  • iOS放大镜效果实现-ASMagnifierManger

    ASMagnifierManger 放大镜效果。可更改放大倍数和放大镜大小 特点介绍 放大镜效果 放大镜形状自定义...

  • Winform绘制圆角按钮

    最近做Winfrom项目,Winfrom不同于WPF,界面效果没有WPF那么好做,圆角按钮只能靠出背景图,但是总是...

  • WPF放大镜的实现

    源代码 源码地址 准备 通过nuget 获取MouseKeyHook 库image.png 添加Forms和Dra...

  • WPF简介

    目录 什么是WPF? WPF的历史? 为什么要用WPF及WPF作用 WPF与winForm区别? 什么是WPF? ...

  • WPF:border凹陷效果

    没有找到内置的方法,用两个Border实现类似效果。

  • 放大镜效果

    写在最前面:一定要注意设置样式的时候大图片和小图片的width,height是有比例关系的;废话不多说,直接放效果...

  • 放大镜效果

    基本原理,左边有一个盛放图片的容器,里面有哥哥小的遮罩用来提示把那一部分展示到右边的大的展示放大之后的图片的部分左...

  • 放大镜效果

    商城中常用的图片放大效果 简书会自动上传外链图片,所以这里代码里面img标签里面对应的换两个地址【@换成.】,ht...

  • 放大镜效果

    *{ margin:0; padding:0; } body{ width: 960p...

网友评论

      本文标题:WPF放大镜效果

      本文链接:https://www.haomeiwen.com/subject/fafpnttx.html