WPF放大镜效果

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

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

 

 
image.png

下面我们来实现。
 

<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>

 


窗体上就放了一个报表组件,和一个放大镜。放大镜根据鼠标移动。
 

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);
}

 


其实最后放大效果并不好,放大镜的放大,其清晰度并没有提高,反而会模糊,如果是矢量图的话,显示效果不会随着缩放而降低。不过如果是文字的话,效果会好很多。

 
image.png


不过,最终这个项目,还是用的DEV报表组件的放大功能。

 
image.png


哈哈,效果不错。

目录
相关文章
|
C#
WPF 控件自定义背景
<!--控件要设置尺寸的话,设置的尺寸必须比下面的图形的尺寸要小,不然显示不开--> <Label Content="直角测试" Width="90" Height="90" HorizontalContentAlignment="Center" Vert...
1019 0
|
C#
WPF实现窗体中的悬浮按钮
原文:WPF实现窗体中的悬浮按钮 WPF实现窗体中的悬浮按钮,按钮可拖动,吸附停靠在窗体边缘。 控件XAML代码: ...
2353 0
|
C#
WPF 的毛玻璃效果
原文:WPF 的毛玻璃效果 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/koloumi/article/details/76917519 ...
2385 0
|
前端开发 C# Windows
WPF之鼠标滑动切换图片
原文:WPF之鼠标滑动切换图片   在网上找了一会儿也没找到我想要的效果,还是自己动手,丰衣足食吧。   需求:当前面板中只显示一张图片,图片栏的下部有用来显示当前图片处于图片队列中的位置的圆球,并且点击下部栏内的圆球可以快速切换,附动画缓动效果。
1235 0
|
C#
WPF中制作无边框窗体
原文:WPF中制作无边框窗体 众所周知,在WinForm中,如果要制作一个无边框窗体,可以将窗体的FormBorderStyle属性设置为None来完成。
1538 0
WPF-WPF BitmapEffect (按钮凹凸效果)
原文:WPF-WPF BitmapEffect (按钮凹凸效果) BitmapEffect位图效果是简单的像素处理操作。它可以呈现下面几种特殊效果。              BevelBitmapEffect        凹凸效果             BlurBitmapEffect...
1784 0
|
C#
WPF中利用RadialGradient模拟放大镜效果
原文:WPF中利用RadialGradient模拟放大镜效果 --------------------------------------------------------------------------------引用时请保留以下信息:大可山 [MSN:a3news(AT)hotmail.
1015 0
|
前端开发 C#
WPF 实现拖动工具箱效果
原文:WPF 实现拖动工具箱效果     1.效果   点击左边的矩形拖动到右边canvas面板,右边面板添加矩形  2.布局  左边是个StockPanel,上面有个矩形,右边是个Canvas面板。
2036 0
|
C#
WPF 窗口
原文:WPF 窗口 在WPF中,经常需要对窗口进行设置,下面讲讲常用的几个设置。 窗口样式 1、无边框窗口 无边框透明窗体 设置 WindowStyle="None"--无边框,如果需要其它按钮,如缩小、放大、收缩、关闭按钮,可以自定义 AllowsTransparency="True"-...
748 0
|
C# Windows Web App开发
WPF 应用完全模拟 UWP 的标题栏按钮
原文:WPF 应用完全模拟 UWP 的标题栏按钮 版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:http://blog.csdn.net/wpwalter/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
1089 0