in plot-api/src/commonMain/kotlin/org/jetbrains/letsPlot/util/pngj/ImageLineInt.kt [165:202]
override fun writeToPngRaw(raw: ByteArray) {
raw[0] = filterType.value.toByte()
when (imgInfo.bitDepth) {
8 -> {
for (i in 0 until size) {
raw[i + 1] = scanline[i].toByte()
}
}
16 -> {
var i = 0
var s = 1
while (i < size) {
raw[s++] = (scanline[i] shr 8).toByte()
raw[s++] = (scanline[i] and 0xff).toByte()
i++
}
}
else -> { // packed formats
var shi: Int
var v: Int
val bd: Int = imgInfo.bitDepth
shi = 8 - bd
v = 0
var i = 0
var r = 1
while (i < size) {
v = v or (scanline[i] shl shi)
shi -= bd
if (shi < 0 || i == size - 1) {
raw[r++] = v.toByte()
shi = 8 - bd
v = 0
}
i++
}
}
}
}