如何以精确的分辨率获取浮点数或双精度鼠标位置?

问题描述 投票:0回答:4

我需要以 float 或 double 的形式获取鼠标单击位置,我该怎么做?在鼠标侦听器中,我像这样获取点,

e.getPoint();

但是 Point 对象的 x 和 y 值是整数,我需要 float 或 double 的位置。 任何帮助将不胜感激。

编辑 我需要精确的分辨率。

java coordinates mouseevent point
4个回答
2
投票

getPoint()
为您提供整数值,因为这是指定坐标的精度。请参阅 http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Point.html

为什么需要浮点值?

编辑:为了回应您的评论,您需要使用诸如floor(始终向下舍入)或round(舍入到最近的整数)之类的函数将绝对位置映射到屏幕上的像素。系统没有 0.2 像素或类似的概念。您可以不断截断计算的小数部分,或者始终保持精确的坐标并根据需要将它们映射到像素。


1
投票

int
您应该能够毫无问题地投射到
double
float

double x = e.getPoint().x;
double y = e.getPoint().y;

但是已经有一些方法可以做到这一点:

double x = e.getPoint().getX();
double y = e.getPoint().getY();

我在这里遗漏了什么吗?

请注意,精度不会更高 - 鼠标只能捕捉到完整像素,因此通常整数就可以了。但如果您需要根据这些值进行计算,浮点表示可能会很有用。


0
投票

您无法获得比

getPoint()
更精确的点,它返回一个仅包含两个整数的 Point 对象。 想用这个实现什么目标?


0
投票

一个旧线程,但要求具有亚像素分辨率的鼠标位置绝对有意义,这根本不是一个毫无意义的请求!

许多输入设备的原始分辨率比标称显示分辨率高得多,而且现在大多数人都拥有高 DPI/视网膜分辨率显示器。 Graphics2D 允许您使用浮点数或双精度数以子像素分辨率进行绘制,并且 MouseWheelEvent.getPreciseWheelRotation() 返回双精度数。

但不,不幸的是,MouseEvents 只提供整数分辨率,因此您必须实现自己的缩放。也许如果您将对象拖动 15 像素,实际上您只在屏幕上将其移动了 1.5 像素。该对象似乎被光标“留在后面”,但您可以更准确地定位它。您可以通过查看屏幕上渲染的对象而不是光标来了解对象移动到的位置。

© www.soinside.com 2019 - 2024. All rights reserved.