You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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这个专门做图片缩放的轻量级库,它的代码更简洁,缩放效果也更稳定:

  1. 下载Imgscalr的jar包(体积很小,直接搜就能找到),加到你的项目里
  2. 只用一行代码就能完成缩放:
// 先导入包: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 08:02:41