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

 
image.png

下面我们来实现。

  1. <Grid x:Name="rootLayout">
  2. <report:DevReport x:Name="rep" PreviewMouseMove="rep_PreviewMouseMove"/>
  3. <Canvas>
  4. <Canvas Name="magnifierCanvas" IsHitTestVisible="False">
  5. <Ellipse Width="150" Height="150" StrokeThickness="3" Fill="LightBlue">
  6. </Ellipse>
  7. <Ellipse Width="150" Height="150" Name="magnifierEllipse">
  8. <Ellipse.Fill>
  9. <VisualBrush x:Name="vb" Visual="{Binding ElementName=rep}" Stretch="UniformToFill" ViewboxUnits="Absolute"
  10. Viewbox="0,25,50,50" ViewportUnits="RelativeToBoundingBox" Viewport="0,0,1,1">
  11. </VisualBrush>
  12. </Ellipse.Fill>
  13. </Ellipse>
  14. </Canvas>
  15. </Canvas>
  16. </Grid>

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

  1. private void rep_PreviewMouseMove(object sender, MouseEventArgs e)
  2. {
  3. Point rate = new Point(, );
  4. Point pos = e.MouseDevice.GetPosition(rootLayout); //相对于outsideGrid 获取鼠标的坐标
  5. Rect viewBox = vb.Viewbox; //这里的Viewbox和前台的一样 这里就是获取前台Viewbox的值
  6. double xoffset = ; //因为鼠标要让它在矩形(放大镜)的中间 那么我们就要让矩形的左上角重新移动位置
  7. double yoffset = ;
  8. xoffset = magnifierEllipse.ActualWidth / ;
  9. yoffset = magnifierEllipse.ActualHeight / ;
  10. viewBox.X = pos.X - xoffset + (magnifierEllipse.ActualWidth - magnifierEllipse.ActualWidth / rate.X) / ;
  11. viewBox.Y = pos.Y - yoffset + (magnifierEllipse.ActualHeight - magnifierEllipse.ActualHeight / rate.Y) / ;
  12. vb.Viewbox = viewBox;
  13. Canvas.SetLeft(magnifierCanvas, pos.X - xoffset); //同理重新定位Canvas magnifierCanvas的坐标
  14. Canvas.SetTop(magnifierCanvas, pos.Y - yoffset);
  15. }

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

 
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. Angular的一些用法或者结构技巧

    如果有更好的方式,请留言交流: 2017-07-07 多个controller共用一个函数.在$rootScope中定义方法, $rootScope.share_fun = function test ...

  2. vue中$ref的基本用法

    1.使用在一般的标签上 <div id="app"> <input ref="count" type="text" v-m ...

  3. 全面了解HTTP请求方法说明

    超文本传输协议(HTTP, HyperText Transfer Protocol)是一种无状态的协议,它位于OSI七层模型的传输层.HTTP客户端会根据需要构建合适的HTTP请求方法,而HTTP服务 ...

  4. 2017/2/11CSS基础

    一:html中div: 1.DIV标签应用于 Style Sheet(样式表)方面会更显威力,它最终目的是给设计者另一种组织能力,有 Class.Style.title.ID 等属性. 2.<d ...

  5. 使用adb shell 模拟点击事件

    针对问题[appium无法点击到某一内容,需要使用adb去执行点击事件] 需要命令: adb shell adb devices input [input可以实现的功能]: 输入文本信息:input ...

  6. CMDB 配置管理数据库

  7. mysql下载、安装

    一.下载 网上下载地址五花八门,为了防止出现不必要的麻烦,建议直接从官网下载.有几点好处: 1.没有任何其他捆绑的软件 2.版本分布清晰,一般建议选择较新版本    mysql官网下载地址:https ...

  8. 知识点:CSS代码语法

    css 样式由选择符和声明组成,而声明又由属性和值组成,如下图所示: 选择符:又称选择器,指明网页中要应用样式规则的元素,如本例中是网页中所有的段(p)的文字将变成蓝色,而其他的元素(如ol)不会受到 ...

  9. RecyclerView怎么能没有ItemClickListener?加一个!

    RecyclerView可以用来代替ListView来展现大量的数据.Google在RecyclerView中提升了性能,和更多好用的API. 简单介绍RecyclerView 使用RecyclerV ...

  10. mac终端的命令都失效的解决方法

    step1. 在terminal里面输入: export PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin&qu ...