在做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(, );
Point pos = e.MouseDevice.GetPosition(rootLayout); //相对于outsideGrid 获取鼠标的坐标
Rect viewBox = vb.Viewbox; //这里的Viewbox和前台的一样 这里就是获取前台Viewbox的值
double xoffset = ; //因为鼠标要让它在矩形(放大镜)的中间 那么我们就要让矩形的左上角重新移动位置
double yoffset = ;
xoffset = magnifierEllipse.ActualWidth / ;
yoffset = magnifierEllipse.ActualHeight / ;
viewBox.X = pos.X - xoffset + (magnifierEllipse.ActualWidth - magnifierEllipse.ActualWidth / rate.X) / ;
viewBox.Y = pos.Y - yoffset + (magnifierEllipse.ActualHeight - magnifierEllipse.ActualHeight / rate.Y) / ;
vb.Viewbox = viewBox;
Canvas.SetLeft(magnifierCanvas, pos.X - xoffset); //同理重新定位Canvas magnifierCanvas的坐标
Canvas.SetTop(magnifierCanvas, pos.Y - yoffset);
}

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

 
image.png

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

 
image.png

哈哈,效果不错。

WPF放大镜效果的更多相关文章

  1. WPF设置VistualBrush的Visual属性制作图片放大镜效果

    原文:WPF设置VistualBrush的Visual属性制作图片放大镜效果 效果图片:原理:设置VistualBrush的Visual属性,利用它的Viewbox属性进行缩放. XAML代码:// ...

  2. WPF中利用RadialGradient模拟放大镜效果

    原文:WPF中利用RadialGradient模拟放大镜效果 --------------------------------------------------------------------- ...

  3. 关于jQuery中实现放大镜效果

    1.1.1 摘要 相信大家都见过或使用过放大镜效果,甚至实现过该效果,它一般应用于放大查看商品图片,一些电商网站(例如:凡客,京东商城,阿里巴巴等)都有类似的图片查看效果. 在接下来的博文中,我们将向 ...

  4. 利用JS实现购物网站商品放大镜效果

    大家几乎都有在网上购物的经验,有的网站会有一个商品放大镜功能, 就是把鼠标移到图片上的时候,旁边会有另外一张大的图片展示,等同于 放大镜效果,那这样的效果怎样实现的呢,我把代码发给大家,请大家参考. ...

  5. 【JavaScript】放大镜效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 原生js实现放大镜效果

    今天做任务的时候,有一个任务就是让实现电商网站常用的放大镜效果,类似于这样的效果,之前并没有做过这种放大镜效果,刚开始的思路是对图片进行裁剪,但是后来发现实在是难以实现,于是求助了万能的谷歌,发现一个 ...

  7. jQuery实现放大镜效果

    1.1.1 摘要 相信大家都见过或使用过放大镜效果,甚至实现过该效果,它一般应用于放大查看商品图片,一些电商网站(例如:凡客,京东商城,阿里巴巴等)都有类似的图片查看效果. 在接下来的博文中,我们将向 ...

  8. Magnifier.js - 支持鼠标滚轮缩放的图片放大镜效果

    Magnifier.js 是一个 JavaScript 库,能够帮助你在图像上实现放大镜效果,支持使用鼠标滚轮放大/缩小功能.放大的图像可以显示在镜头本身或它的外部容器中.Magnifier.js 使 ...

  9. jquery放大镜效果

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8& ...

随机推荐

  1. RecyclerView错误

    1. java.lang.NoClassDefFoundError: android.support.v7.widget.RecyclerView 这个错误真TM见鬼,明明jar包里面就有这个类,工程 ...

  2. qr 生成二维码

    package com.common; import com.swetake.util.Qrcode; import jp.sourceforge.qrcode.QRCodeDecoder; impo ...

  3. Emacs, Nano, or Vim 编辑器“三剑客”

    # Vim 强大,多种模式相互切换,不同于传统“录入式“写东西 对后续两个编辑器不熟悉 # nano 退出ctrl + x http://man.linuxde.net/nano # emacs ht ...

  4. HttpMethods(C#.net)

    HttpMethods  (C#.Net) using System; using System.Collections.Generic; using System.Linq; using Syste ...

  5. IBM X3650 M3/M4的服务器装系统

    IBM X3650 M3/M4的服务器一般都有两块以上的硬盘.所以如果没有做RAID,那首先应该做好raid 磁盘阵列.本文装系统的前提是RAID已经做好. 一般安装系统的方式为先在IBM官网下载对应 ...

  6. C++中1/0和1/0.0的区别

    参考:https://zhidao.baidu.com/question/1494117716904764979.html 问题说明:在Dev中1/0会报错“除数不得为0”,但是1/0.0不报错,并且 ...

  7. linux学习--查看cpu及内存信息

    查看物理cpu个数: cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l 查看每个cpu核数 cat /proc/cp ...

  8. vmware虚拟机centOs安装教程

    1安装vmware 虚拟机软件 1.解压vmware安装 汉化vmware虚拟机 复制注册码,并填写进vmware 2安装linux(centos)虚拟机 1.  点击文件----->新建虚拟机 ...

  9. Python写出LSTM-RNN的代码

    0. 前言 本文翻译自博客: iamtrask.github.io ,这次翻译已经获得trask本人的同意与支持,在此特别感谢trask.本文属于作者一边学习一边翻译的作品,所以在用词.理论方面难免会 ...

  10. mysql delete from table 失败

    SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'; TRUNCATE TABLE ...