我有一个JAVA图形应用程序,它由许多不同的形状(直线、圆形、弧线等,通过Graphics.drawLine()、drawArc()...方法绘制)组成。我想在许多(如果不是全部)绘制对象上创建鼠标悬停事件。
我的想法是存储某种带有元数据的位图,并用它来确定鼠标位于哪个对象上。有没有办法在Java中做到这一点? (每次鼠标移动循环遍历所有对象似乎不可行)。
谢谢
约翰
最佳答案
主色解决方案
(移自评论)
- 创建一个离屏图形缓冲区(如 BufferedImage),大小与主题图像相同。
- 将所有对象绘制到此缓冲区中。每个对象都有一种自己的颜色。根据对象数量,您可以优化图像缓冲区:例如使用 8 位图形。
- 按像素读取生成的图像缓冲区(例如 Java - get pixel array from image )。确定当前鼠标位置的像素颜色,并将颜色索引(或 RGB 值)映射到源对象。
优点:
- 解决方案是“像素精确”:对象边界是精确的 - 像素到像素。
- 轻松解决重叠对象问题。只需按照所需的顺序绘制它们即可。
- 对象的复杂性不受限制。理论上位图也是可能的。
缺点:
- 要移动一个对象,必须重新绘制整个离屏缓冲区
- 使用低位图像缓冲区时可以限制对象数量
关于java - 在位图中定义区域(java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17658149/