in plot-api/src/jvmTest/kotlin/org/jetbrains/letsPlot/util/pngj/TestSupport.kt [124:168]
fun showFilters(
pngr: File, maxgroups: Int, usenewlines: Boolean, showSumm: Boolean = false,
showSummPercent: Boolean = false
): String {
@Suppress("NAME_SHADOWING")
var maxgroups = maxgroups
@Suppress("NAME_SHADOWING")
var usenewlines = usenewlines
if (maxgroups == 0) usenewlines = false
if (maxgroups < 0) maxgroups = Int.MAX_VALUE
val types = IntArray(5)
val png = PngReaderByte(pngr.toInputPngStream())
val sb = StringBuilder()
val ft = IntArray(png.imgInfo!!.rows + 1)
for (r in 0 until png.imgInfo!!.rows) {
ft[r] = (png.readRow() as IImageLineArray).filterType.value
types[ft[r]]++
}
png.end()
ft[png.imgInfo!!.rows] = -1 // dummy end value to ease computation
if (showSummPercent) {
for (i in 0..4) {
types[i] = ((types[i] * 100 + png.imgInfo!!.rows / 2) / png.imgInfo!!.rows)
}
}
if (showSumm || showSummPercent) sb.append(types.contentToString() + if (usenewlines) "\n" else "\t")
// groups
if (maxgroups != 0) {
var contgroups = 0
var r0 = 0
for (r in 1 until ft.size) {
if (ft[r] != ft[r - 1]) { // found group
sb.append(java.lang.String.format("%s:%d(%d)", FilterType.getByVal(ft[r - 1]), r0, r - r0))
.append(if (usenewlines) "\n" else " ")
contgroups++
r0 = r
if (contgroups >= maxgroups && r < ft.size - 1) {
sb.append("...").append(if (usenewlines) "\n" else " ")
break
}
}
}
}
return sb.toString().trim { it <= ' ' }.replace("FILTER_".toRegex(), "")
}