comparison app/src/main/java/com/bartsent/simpleresizer/EditImage.kt @ 9:884092efe31a concur

Gets gratuitously killed. WTF?
author David Barts <n5jrn@me.com>
date Wed, 17 Feb 2021 13:20:25 -0800
parents e8059b166de1
children
comparison
equal deleted inserted replaced
7:9374d044a132 9:884092efe31a
10 import android.os.Environment 10 import android.os.Environment
11 import android.provider.MediaStore 11 import android.provider.MediaStore
12 import android.provider.OpenableColumns 12 import android.provider.OpenableColumns
13 import android.view.MenuItem 13 import android.view.MenuItem
14 import android.view.View 14 import android.view.View
15 import android.view.Window
15 import android.widget.EditText 16 import android.widget.EditText
17 import android.widget.ProgressBar
16 import androidx.appcompat.app.AlertDialog 18 import androidx.appcompat.app.AlertDialog
17 import androidx.appcompat.app.AppCompatActivity 19 import androidx.appcompat.app.AppCompatActivity
18 import androidx.appcompat.widget.PopupMenu 20 import androidx.appcompat.widget.PopupMenu
19 import com.bartsent.simpleresizer.databinding.ActivityEditImageBinding 21 import com.bartsent.simpleresizer.databinding.ActivityEditImageBinding
20 import com.bartsent.simpleresizer.lib.getScaledInstance 22 import com.bartsent.simpleresizer.lib.getScaledInstance
21 import java.io.File 23 import java.io.File
22 import java.io.IOException 24 import java.io.IOException
25 import kotlin.concurrent.thread
23 import kotlin.math.roundToInt 26 import kotlin.math.roundToInt
24 27
25 class EditImage : AppCompatActivity() { 28 class EditImage : AppCompatActivity() {
26 private object State { 29 private object State {
27 var uri: Uri? = null 30 var uri: Uri? = null
138 val oldBitmap = State.bitmap!! 141 val oldBitmap = State.bitmap!!
139 val factor = newMax.toDouble() / maxOf(oldBitmap.width, oldBitmap.height).toDouble() 142 val factor = newMax.toDouble() / maxOf(oldBitmap.width, oldBitmap.height).toDouble()
140 if (factor >= 1.0) { 143 if (factor >= 1.0) {
141 throw IllegalArgumentException("can only scale down") 144 throw IllegalArgumentException("can only scale down")
142 } 145 }
143 val newBitmap = Bitmap.createBitmap((oldBitmap.width * factor).roundToInt(), (oldBitmap.height * factor).roundToInt(), oldBitmap.config) 146 binding.progressBar.visibility = ProgressBar.VISIBLE
144 copyColorSpace(oldBitmap, newBitmap) 147 thread {
145 setImage(oldBitmap.getScaledInstance( 148 val newBitmap = oldBitmap.getScaledInstance(
146 (oldBitmap.width.toDouble() * factor + 0.5).toInt(), 149 (oldBitmap.width.toDouble() * factor + 0.5).toInt(),
147 (oldBitmap.height.toDouble() * factor + 0.5).toInt())) 150 (oldBitmap.height.toDouble() * factor + 0.5).toInt())
151 runOnUiThread {
152 binding.progressBar.visibility = ProgressBar.INVISIBLE
153 setImage(newBitmap)
154 }
155 }
148 } 156 }
149 157
150 // is there any way to remember the last scale value? 158 // is there any way to remember the last scale value?
151 // if so: should we? 159 // if so: should we?
152 160
213 copyColorSpace(oldBitmap, newBitmap) 221 copyColorSpace(oldBitmap, newBitmap)
214 val rotater = Matrix().apply { 222 val rotater = Matrix().apply {
215 setRotate(deg.toFloat(), oldBitmap.width.toFloat()/2.0f, oldBitmap.height.toFloat()/2.0f) 223 setRotate(deg.toFloat(), oldBitmap.width.toFloat()/2.0f, oldBitmap.height.toFloat()/2.0f)
216 postTranslate((w - oldBitmap.width).toFloat()/2.0f, (h - oldBitmap.height).toFloat()/2.0f) 224 postTranslate((w - oldBitmap.width).toFloat()/2.0f, (h - oldBitmap.height).toFloat()/2.0f)
217 } 225 }
218 Canvas(newBitmap).run { 226 binding.progressBar.visibility = ProgressBar.VISIBLE
219 drawBitmap(oldBitmap, rotater, null) 227 thread {
220 } 228 Canvas(newBitmap).run {
221 setImage(newBitmap) 229 drawBitmap(oldBitmap, rotater, null)
230 }
231 runOnUiThread {
232 binding.progressBar.visibility = ProgressBar.INVISIBLE
233 setImage(newBitmap)
234 }
235 }
222 } 236 }
223 237
224 fun cancelClicked(view: View): Unit { 238 fun cancelClicked(view: View): Unit {
225 State.uri = null 239 State.uri = null
226 State.bitmap = null 240 State.bitmap = null