Mercurial > cgi-bin > hgweb.cgi > SimpleResizer
diff app/src/main/java/com/bartsent/simpleresizer/EditImage.kt @ 6:e8059b166de1
Lanczos works, but is painfully slow.
author | David Barts <n5jrn@me.com> |
---|---|
date | Tue, 16 Feb 2021 17:29:52 -0800 |
parents | 247e03baf77c |
children | 884092efe31a 5626557ac542 |
line wrap: on
line diff
--- a/app/src/main/java/com/bartsent/simpleresizer/EditImage.kt Wed Feb 10 16:31:01 2021 -0800 +++ b/app/src/main/java/com/bartsent/simpleresizer/EditImage.kt Tue Feb 16 17:29:52 2021 -0800 @@ -17,6 +17,7 @@ import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.PopupMenu import com.bartsent.simpleresizer.databinding.ActivityEditImageBinding +import com.bartsent.simpleresizer.lib.getScaledInstance import java.io.File import java.io.IOException import kotlin.math.roundToInt @@ -135,17 +136,15 @@ fun doScale(newMax: Int): Unit { val oldBitmap = State.bitmap!! - val factor = newMax.toFloat() / maxOf(oldBitmap.width, oldBitmap.height).toFloat() + val factor = newMax.toDouble() / maxOf(oldBitmap.width, oldBitmap.height).toDouble() if (factor >= 1.0) { throw IllegalArgumentException("can only scale down") } val newBitmap = Bitmap.createBitmap((oldBitmap.width * factor).roundToInt(), (oldBitmap.height * factor).roundToInt(), oldBitmap.config) copyColorSpace(oldBitmap, newBitmap) - val scaler = Matrix().apply { setScale(factor, factor) } - Canvas(newBitmap).run { - drawBitmap(oldBitmap, scaler, null) - } - setImage(newBitmap) + setImage(oldBitmap.getScaledInstance( + (oldBitmap.width.toDouble() * factor + 0.5).toInt(), + (oldBitmap.height.toDouble() * factor + 0.5).toInt())) } // is there any way to remember the last scale value?