代码之家  ›  专栏  ›  技术社区  ›  vytaute

在Kotlin的阵列中使用setRGB()是必需的

  •  0
  • vytaute  · 技术社区  · 4 年前

    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、宽度、高度、rgb颜色的阵列、偏移、扫描大小)。

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

    2 回复  |  直到 4 年前
        1
  •  1
  •   Tom    4 年前

    setRGB 期待一个原始的 int[]

    在kotlin中,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
  •  1
  •   Harald K    4 年前

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

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

    width height 系统参数 setRGB 采用 int 数组,是要设置的区域的高度和宽度(通常为 offset == 0 scansize == width ) . 您通常仅使用此选项设置多个像素。要使用它设置单个像素,值应该是 1, 1 intArrayOf

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

    这也应该起作用。但我认为由于数组边界检查和复制的原因,它不那么优雅,可能速度较慢。