Mercurial > cgi-bin > hgweb.cgi > SimpleResizer
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 |