in plot-api/src/commonMain/kotlin/org/jetbrains/letsPlot/util/pngj/ImageLineHelper.kt [62:108]
fun convert2rgba(line: IImageLineArray, pal: PngChunkPLTE, trns: PngChunkTRNS?, buf: IntArray?): IntArray {
@Suppress("NAME_SHADOWING")
var buf = buf
val imi: ImageInfo = line.imageInfo
val nsamples: Int = imi.cols * 4
if (buf == null || buf.size < nsamples) buf = IntArray(nsamples)
val maxval = if (imi.bitDepth == 16) (1 shl 16) - 1 else 255
fill(buf, maxval)
if (imi.indexed) {
val tlen = trns?.palletteAlpha?.size ?: 0
for (s in 0 until imi.cols) {
val index: Int = line.getElem(s)
pal.getEntryRgb(index, buf, s * 4)
if (index < tlen) {
buf[s * 4 + 3] = trns!!.palletteAlpha[index]
}
}
} else if (imi.greyscale) {
var unpack: IntArray? = null
if (imi.bitDepth < 8) unpack = DEPTH_UNPACK[imi.bitDepth]
var s = 0
var i = 0
var p = 0
while (p < imi.cols) {
buf[s++] = unpack?.get(line.getElem(i++)) ?: line.getElem(i++)
buf[s] = buf[s - 1]
s++
buf[s] = buf[s - 1]
s++
if (imi.channels == 2) buf[s++] = unpack?.get(line.getElem(i++)) ?: line.getElem(i++) else buf[s++] =
maxval
p++
}
} else {
var s = 0
var i = 0
var p = 0
while (p < imi.cols) {
buf[s++] = line.getElem(i++)
buf[s++] = line.getElem(i++)
buf[s++] = line.getElem(i++)
buf[s++] = if (imi.alpha) line.getElem(i++) else maxval
p++
}
}
return buf
}