【问题标题】:Using setRGB() required IntArray in Kotlin在 Kotlin 中使用 setRGB() 所需的 IntArray
【发布时间】:2021-12-16 00:34:03
【问题描述】:

我想在 Kotlin 中更改像素的颜色。我得到一个像素,想为它设置新值,但我在 setRGB 方法中得到一个错误,它需要 IntArray!但找到了数组:

val c: Int = bufferedImage.getRGB(x, y)
val color = Color(c)

val newColor = Array<Int>(3) { color.red; 0; 0 }
bufferedImage.setRGB(x, y, 0, 0, newColor, 0, 0)

另外,我正在用 Kotlin/Java 编写代码,但找不到 setRGB() 方法如何工作的详细说明。我从 Intelij IDE 知道参数是:setRGB(x, y, width, height, IntArray for rgb color, offset, scansize)。

但是什么是宽度,高度?是图片的尺寸吗?如果我只改变一个像素,它们为什么重要?

以及如何将新颜色作为 IntArray 正确传递给 setRGB() 方法?

【问题讨论】:

  • 但是如何将 Color 类型转换为 int 呢?例如颜色(255, 0, 0)?
  • 我在下面发布了一个答案。
  • 好的,谢谢。这就是我苦苦挣扎的事情,并开始寻找另一个函数构造函数。现在修好了。谢谢!

标签: java kotlin intellij-idea rgb bufferedimage


【解决方案1】:

setRGB 期望原始的int[]

在 kotlin 中,int[] 的 java 等价物是 IntArray (https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int-array/)

所以你应该将val newColor的创建改为:

val newColor = intArrayOf(color.red, 0, 0)

完整示例:

val c: Int = bufferedImage.getRGB(x, y)
val color = Color(c)

val newColor = intArrayOf(color.red, 0, 0)
bufferedImage.setRGB(x, y, 0, 0, newColor, 0, 0)

有关该功能的更多信息,您可以参考 javadoc:https://docs.oracle.com/javase/7/docs/api/java/awt/image/BufferedImage.html#setRGB(int,%20int,%20int,%20int,%20int[],%20int,%20int)

【讨论】:

  • 感谢您的文档,找不到这些文档。但我必须说,它们不是最容易导航的......
【解决方案2】:

如果您只更改一个像素(一次),您应该使用setRGB(int x, int y, int aRGB) 方法。根本不用担心数组。

我通常不会编写 Kotlin,因此语法可能不是 100% 正确,但无论如何:

val c: Int = bufferedImage.getRGB(x, y)
val color = Color(c)

val newColor = Color(color.red, 0, 0)
bufferedImage.setRGB(x, y, newColor.getRGB())

也就是说,采用int 数组的setRGB 方法的widthheight 参数是您要设置的区域的高度和宽度(通常是offset == 0 和@987654328 @) 。您通常只使用它来设置多个像素。要使用它设置单个像素,值应该只是1, 1(我从@Tom 的答案中借用了intArrayOf 部分):

val newColor = intArrayOf(color.red, 0, 0)
bufferedImage.setRGB(x, y, 1, 1, newColor, 0, 1)

这也应该有效。但我认为由于数组边界检查和复制,它不太优雅并且可能更慢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-18
    • 2020-09-04
    • 2017-02-23
    • 2019-08-08
    • 1970-01-01
    • 2021-09-19
    • 2012-08-10
    • 1970-01-01
    相关资源
    最近更新 更多