Kotlin调用BufferedImage.setRGB()需IntArray报错及参数含义咨询
Kotlin BufferedImage setRGB 方法使用问题解答
1. 参数类型报错原因
你遇到的类型不兼容报错是因为Kotlin中Array<Int>是装箱后的整数数组(对应Java的Integer[]),而setRGB方法要求的参数是原生int数组,在Kotlin中对应IntArray类型,二者不能直接通用。
另外你当前的代码还存在两个逻辑错误:
setRGB的数组参数中每个元素是单个像素的完整ARGB编码值,不是拆分的R/G/B三个通道值,不需要创建长度为3的数组- 你给width、height传了0,此时方法不会执行任何像素修改操作
2. width、height参数说明
这两个参数是你需要修改的矩形像素区域的宽度和高度,不是整张图片的尺寸。这个重载的setRGB是用来批量修改一块矩形区域内的所有像素的:
- 如果你要修改20*30的矩形区域,就传width=20、height=30
- 仅修改单个像素时,两个参数都填
1即可,代表你要修改的是1*1大小的区域
3. 正确实现代码
方案1:使用单像素修改重载(最简便)
BufferedImage自带专门修改单个像素的重载方法,不需要传入数组,直接用即可:
val c: Int = bufferedImage.getRGB(x, y) val originColor = Color(c) // 示例:修改为纯红色,保留原有透明度 val newRgb = Color(255, originColor.green, originColor.blue, originColor.alpha).rgb bufferedImage.setRGB(x, y, newRgb)
方案2:使用数组参数的重载(符合你当前调用方式)
如果一定要用带数组的重载版本,写法如下:
val c: Int = bufferedImage.getRGB(x, y) val originColor = Color(c) val newRgb = Color(255, 0, 0, originColor.alpha).rgb // 创建符合要求的IntArray,单像素场景数组长度为1即可 val pixelArray = intArrayOf(newRgb) // 1*1的修改区域,offset、scansize都填0 bufferedImage.setRGB(x, y, 1, 1, pixelArray, 0, 0)
内容的提问来源于stack exchange,提问作者vytaute
相关产品推荐
相关产品推荐

