view app/src/main/java/com/bartsent/simpleresizer/lib/LanczosKernel.kt @ 35:6607f675a5f7

Add licensing.
author David Barts <n5jrn@me.com>
date Thu, 11 Mar 2021 22:41:48 -0800
parents 86740f593b6c
children
line wrap: on
line source

package com.bartsent.simpleresizer.lib

/*
 * Some code in this file has been adapted from: https://github.com/disintegration/imaging/ .
 */

import kotlin.math.PI
import kotlin.math.abs
import kotlin.math.sin

class LanczosKernel: ScalingKernel {
    override val size = 3.0
    private val memory = HashMap<Double, Double>()

    private fun sinc(x: Double): Double {
        if (x == 0.0)
            return 1.0
        val pix = PI * x
        return  sin(pix) / pix
    }

    override fun weight(x: Double): Double {
        if (abs(x) >= size)
            return 0.0
        val remembered = memory[x]
        if (remembered != null)
            return remembered
        val calculated = sinc(x) * sinc(x/size)
        memory[x] = calculated
        return calculated
    }
}