热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在Picturebox.image上绘制图形或者图片出现偏移,位置不准确

做了一个winform的图片浏览器,放入了splitContainer,在panel1中加入了picturebox,然后通过picturebox的事件MOVE,CLICK,UP,DOUWN,MOUS
做了一个winform的图片浏览器,放入了splitContainer,在panel1中加入了picturebox,然后通过picturebox的事件MOVE,CLICK,UP,DOUWN, MOUSEwHILE,用两种方法实现了图片的放大,缩小,拖动,(针对picturebox控件和picturebox.image进行的),当图片大小大于picturebox时,图像显示不完,如果在不拖动的情况下,要想看不到的区域作图,就需要拖动图片作图,但是作图(bitmap)后发现画上去的线或者图片与自己想要画的位置出现了偏移,估计是坐标系不同,导致在鼠标down的时候取到的位置并不是图片上的x,y,而是工作区中的x,和y,现在不知道该怎么做了,请各位高手指点!!!!

21 个解决方案

#1


PointToClient()试试呢

#2


你是如何将bmp在pic上偏移和缩放的,自己应该保留了参数吧
根据比例换算一下坐标啊
否则当然是只能获取到鼠标点击到pic上的坐标,编译器也没法知道你的pic和你后台的bmp是啥关系

#3


要么就别用bmp
而是在pic上直接作图

外面嵌套个panel,然后缩放pic
这样你获取的坐标就是准确的坐标了

#4


引用 1 楼 pig357 的回复:
PointToClient()试试呢


这个方法已经试了,行不通

#5


引用 2 楼 Z65443344 的回复:
你是如何将bmp在pic上偏移和缩放的,自己应该保留了参数吧
根据比例换算一下坐标啊
否则当然是只能获取到鼠标点击到pic上的坐标,编译器也没法知道你的pic和你后台的bmp是啥关系


我是直接把bmp画在了pic.image上的

#6


引用 5 楼 hxl199109 的回复:
Quote: 引用 2 楼 Z65443344 的回复:

你是如何将bmp在pic上偏移和缩放的,自己应该保留了参数吧
根据比例换算一下坐标啊
否则当然是只能获取到鼠标点击到pic上的坐标,编译器也没法知道你的pic和你后台的bmp是啥关系


我是直接把bmp画在了pic.image上的

也就是说,偏移量,缩放比例,你自己都不知道,只不过是设置了pic的属性之后它就自动调整了?
那就没啥好办法了.

不行试试我说的方法,让pic不要缩放图片,而是根据图片实际大小显示
然后让pic在panel里移动位置
这样你点击pic的时候获取到的坐标就绝对是准确的坐标了

#7


引用 3 楼 Z65443344 的回复:
要么就别用bmp
而是在pic上直接作图

外面嵌套个panel,然后缩放pic
这样你获取的坐标就是准确的坐标了


我就是在panel上放了一个picturebox,然后把panel置于底层的,然后对picturebox进行拖动,放大和缩小

#8


引用 7 楼 hxl199109 的回复:
Quote: 引用 3 楼 Z65443344 的回复:

要么就别用bmp
而是在pic上直接作图

外面嵌套个panel,然后缩放pic
这样你获取的坐标就是准确的坐标了


我就是在panel上放了一个picturebox,然后把panel置于底层的,然后对picturebox进行拖动,放大和缩小

那么既然你已经放大缩小过了,放大缩小的比例你得用变量记住啊,不能直接赋值给控件拉倒了
否则怎么计算啊

#9


要么你用pic.width/bmp.width来算比例,然后根据比例,将坐标换算成bmp的坐标

#10


引用 3 楼 Z65443344 的回复:
要么就别用bmp
而是在pic上直接作图

外面嵌套个panel,然后缩放pic
这样你获取的坐标就是准确的坐标了

我直接上代码:你帮我瞧瞧





#11


为啥要减去e.Location.X??

既然是picturebox的点击事件,那就是picturebox的相对坐标,跟panel和form没有关系

你不要管picturebox相对于panel的坐标是啥

#12


晕,看错了
你那是计算鼠标移动

现在的问题是,你获取了e.X和e.Y就直接把它当bmp的像素坐标了
但是picturebox本身就缩放过,和bmp已经不是同样的大小了

所以需要一个比例换算

#13


比如你的bmp大小是200*200
你的pic大小是50*50

那么点击(20,20)这个点,对应bmp并不是(20,20),而是(80,80)
这个应该能理解吧

#14


picturebox 在 panel 中
鼠标位置是参照 panel 的
当 panel 的滚动条被拖动后(假定向右 100 个像素)picturebox 的 left 将是 -100
这一点你打印出来看一下就知道了
所以画图时,要把鼠标位置折算的 picturebox,因为你是在 picturebox 中画图

#15


bmpX/e.X=bmp.Width/pic.Width
等比公式
把e.X挪到等式右边去就计算出真实的坐标了

#16


引用 13 楼 Z65443344 的回复:
比如你的bmp大小是200*200
你的pic大小是50*50

那么点击(20,20)这个点,对应bmp并不是(20,20),而是(80,80)
这个应该能理解吧

理解当然理解了,换算过程在任何过程都要进行吗?还是只进行一次,比如,点击,缩放,拖拽?

#17


引用 15 楼 Z65443344 的回复:
bmpX/e.X=bmp.Width/pic.Width
等比公式
把e.X挪到等式右边去就计算出真实的坐标了


换算了也不对啊,再仔细看看?有没有类似的Demo之类的?

#18


引用 15 楼 Z65443344 的回复:
bmpX/e.X=bmp.Width/pic.Width
等比公式
把e.X挪到等式右边去就计算出真实的坐标了


换算过后坐标的值都成负的了

#19


我这看看,这个我当时也没计算出来,不知道如何计算偏差,当时我遇到的问题是计算滚动条便宜位置的,后来作罢了

你琢磨出来算法了之后,@我一下,让我也学习学习

#20


不要使用picturebox,使用panel自定义控件自定义,进行无刷新重绘,利用绘制坐标,图片与控件显示比例,鼠标点击坐标等,计算对应图片上的坐标

#21


试试减去picturebox的location.x和location.y

推荐阅读
  • 使用R语言进行Foodmart数据的关联规则分析与可视化
    本文探讨了如何利用R语言中的arules和arulesViz包对Foodmart数据集进行关联规则的挖掘与可视化。文章首先介绍了数据集的基本情况,然后逐步展示了如何进行数据预处理、规则挖掘及结果的图形化呈现。 ... [详细]
  • 本文将详细介绍如何配置并整合MVP架构、Retrofit网络请求库、Dagger2依赖注入框架以及RxAndroid响应式编程库,构建高效、模块化的Android应用。 ... [详细]
  • Kubernetes Services详解
    本文深入探讨了Kubernetes中的服务(Services)概念,解释了如何通过Services实现Pods之间的稳定通信,以及如何管理没有选择器的服务。 ... [详细]
  • 探索CNN的可视化技术
    神经网络的可视化在理论学习与实践应用中扮演着至关重要的角色。本文深入探讨了三种有效的CNN(卷积神经网络)可视化方法,旨在帮助读者更好地理解和优化模型。 ... [详细]
  • 如何高效学习鸿蒙操作系统:开发者指南
    本文探讨了开发者如何更有效地学习鸿蒙操作系统,提供了来自行业专家的建议,包括系统化学习方法、职业规划建议以及具体的开发技巧。 ... [详细]
  • 本报告记录了嵌入式软件设计课程中的第二次实验,主要探讨了使用KEIL V5开发环境和ST固件库进行GPIO控制及按键响应编程的方法。通过实际操作,加深了对嵌入式系统硬件接口编程的理解。 ... [详细]
  • 本文详细介绍了如何在Spring框架中设置事件发布器、定义事件监听器及响应事件的具体步骤。通过实现ApplicationEventPublisherAware接口来创建事件发布器,利用ApplicationEvent类定义自定义事件,并通过ApplicationListener接口来处理这些事件。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 入门指南:使用FastRPC技术连接Qualcomm Hexagon DSP
    本文旨在为初学者提供关于如何使用FastRPC技术连接Qualcomm Hexagon DSP的基础知识。FastRPC技术允许开发者在本地客户端实现远程调用,从而简化Hexagon DSP的开发和调试过程。 ... [详细]
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • 在Effective Java第三版中,建议在方法返回类型中优先考虑使用Collection而非Stream,以提高代码的灵活性和兼容性。 ... [详细]
  • 使用C#构建动态图形界面时钟
    本篇文章将详细介绍如何利用C#语言开发一个具有动态显示功能的图形界面时钟。文章中不仅提供了详细的代码示例,还对可能出现的问题进行了深入分析,并给出了解决方案。 ... [详细]
  • 在现代Web开发中,HTML5 Canvas常用于图像处理和绘图任务。本文将详细介绍如何将Canvas中的图像导出并上传至服务器,适用于拼图、图片编辑等场景。 ... [详细]
  • 本文汇集了作者在准备研究生入学考试过程中的心得体会,包括备考策略、复习重点及应对考试的心理调适技巧,旨在为即将参加考研的学生提供实用建议。 ... [详细]
  • 深入解析Java中的空指针异常及其预防策略
    空指针异常(NullPointerException,简称NPE)是Java编程中最常见的异常之一。尽管其成因显而易见,但开发人员往往容易忽视或未能及时采取措施。本文将详细介绍如何有效避免空指针异常,帮助开发者提升代码质量。 ... [详细]
author-avatar
fuxw
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有