我想在 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() 方法?
uj5u.com熱心網友回復:
如果您只更改一個像素(一次),則應使用該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())
也就是說,采用陣列的方法的widthandheight引數是您要設定的區域的高度和 with (通常是and )。您通常僅使用它來設定多個像素。要使用它設定單個像素,值應該很簡單(我從@Tom 的回答中借用了部分):setRGBintoffset == 0scansize == width1, 1intArrayOf
val newColor = intArrayOf(color.red, 0, 0)
bufferedImage.setRGB(x, y, 1, 1, newColor, 0, 1)
這也應該有效。但我認為由于陣列邊界檢查和復制,它不太優雅并且可能更慢。
uj5u.com熱心網友回復:
setRGB 期待一個原始的 int[]
在 kotlin 中,java 等價物int[]是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, int, int , int, int[], int, int)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/343998.html
上一篇:如何在主工具列下禁用面包屑
