Java Swing中自定义橡皮擦光标缩放问题求助
解决方案:简单实现橡皮擦光标缩放
方法一:用Swing自带工具简化缩放(不用复杂API)
不用纠结BufferedImage的底层操作,直接用Swing提供的Image.getScaledInstance()方法就能快速缩放图片,代码超简单:
// 传入你原来的32x32橡皮擦图片,和想要的目标大小(比如16x16) Image scaledEraser = originalEraserImage.getScaledInstance(16, 16, Image.SCALE_SMOOTH); // 把缩放后的图片做成光标 Cursor eraserCursor = Toolkit.getDefaultToolkit().createCustomCursor(scaledEraser, new Point(0, 0), "eraser"); // 设置到你的画布组件上 yourCanvas.setCursor(eraserCursor);
SCALE_SMOOTH是让缩放后的图片更清晰,不会太模糊new Point(0,0)是光标点击的热点(就是光标真正生效的位置,比如橡皮擦的尖端,你可以根据自己的图片调整坐标)
方法二:用Imgscalr工具库(更省心的缩放)
如果上面的方法效果不够理想,试试Imgscalr这个专门做图片缩放的轻量级库,它的代码更简洁,缩放效果也更稳定:
- 下载Imgscalr的jar包(体积很小,直接搜就能找到),加到你的项目里
- 只用一行代码就能完成缩放:
// 先导入包:import org.imgscalr.Scalr; BufferedImage scaledEraser = Scalr.resize(originalEraserImage, 16); // 转成Image再制作光标 Cursor eraserCursor = Toolkit.getDefaultToolkit().createCustomCursor(scaledEraser, new Point(0, 0), "eraser"); yourCanvas.setCursor(eraserCursor);
这个库会自动处理缩放的细节,不用你操心底层逻辑,特别适合初学者。
注意事项
- 目标大小别设太小,比如8x8可能会看不清,推荐16x16或者20x20的尺寸
- 光标热点要对应橡皮擦的尖端位置,比如如果你的橡皮擦图片尖端在中间,16x16的图片就用
new Point(8,8)
内容的提问来源于stack exchange,提问作者user30364614
相关产品推荐
相关产品推荐

