Mercurial > cgi-bin > hgweb.cgi > SimpleResizer
comparison app/src/main/java/com/bartsent/simpleresizer/EditImage.kt @ 10:5626557ac542 memo
Add progress bar and a worker thread. Still way slow.
author | David Barts <n5jrn@me.com> |
---|---|
date | Wed, 17 Feb 2021 13:39:50 -0800 |
parents | e8059b166de1 |
children | 678adef4774f |
comparison
equal
deleted
inserted
replaced
8:6ae738b8a814 | 10:5626557ac542 |
---|---|
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.widget.EditText | 15 import android.widget.EditText |
16 import android.widget.ProgressBar | |
16 import androidx.appcompat.app.AlertDialog | 17 import androidx.appcompat.app.AlertDialog |
17 import androidx.appcompat.app.AppCompatActivity | 18 import androidx.appcompat.app.AppCompatActivity |
18 import androidx.appcompat.widget.PopupMenu | 19 import androidx.appcompat.widget.PopupMenu |
19 import com.bartsent.simpleresizer.databinding.ActivityEditImageBinding | 20 import com.bartsent.simpleresizer.databinding.ActivityEditImageBinding |
20 import com.bartsent.simpleresizer.lib.getScaledInstance | 21 import com.bartsent.simpleresizer.lib.getScaledInstance |
21 import java.io.File | 22 import java.io.File |
22 import java.io.IOException | 23 import java.io.IOException |
24 import kotlin.concurrent.thread | |
23 import kotlin.math.roundToInt | 25 import kotlin.math.roundToInt |
24 | 26 |
25 class EditImage : AppCompatActivity() { | 27 class EditImage : AppCompatActivity() { |
26 private object State { | 28 private object State { |
27 var uri: Uri? = null | 29 var uri: Uri? = null |
140 if (factor >= 1.0) { | 142 if (factor >= 1.0) { |
141 throw IllegalArgumentException("can only scale down") | 143 throw IllegalArgumentException("can only scale down") |
142 } | 144 } |
143 val newBitmap = Bitmap.createBitmap((oldBitmap.width * factor).roundToInt(), (oldBitmap.height * factor).roundToInt(), oldBitmap.config) | 145 val newBitmap = Bitmap.createBitmap((oldBitmap.width * factor).roundToInt(), (oldBitmap.height * factor).roundToInt(), oldBitmap.config) |
144 copyColorSpace(oldBitmap, newBitmap) | 146 copyColorSpace(oldBitmap, newBitmap) |
145 setImage(oldBitmap.getScaledInstance( | 147 binding.progressBar.visibility = ProgressBar.VISIBLE |
146 (oldBitmap.width.toDouble() * factor + 0.5).toInt(), | 148 thread { |
147 (oldBitmap.height.toDouble() * factor + 0.5).toInt())) | 149 val newBitmap = oldBitmap.getScaledInstance( |
150 (oldBitmap.width.toDouble() * factor + 0.5).toInt(), | |
151 (oldBitmap.height.toDouble() * factor + 0.5).toInt()) | |
152 runOnUiThread { | |
153 binding.progressBar.visibility = ProgressBar.INVISIBLE | |
154 setImage(newBitmap) | |
155 } | |
156 } | |
148 } | 157 } |
149 | 158 |
150 // is there any way to remember the last scale value? | 159 // is there any way to remember the last scale value? |
151 // if so: should we? | 160 // if so: should we? |
152 | 161 |
213 copyColorSpace(oldBitmap, newBitmap) | 222 copyColorSpace(oldBitmap, newBitmap) |
214 val rotater = Matrix().apply { | 223 val rotater = Matrix().apply { |
215 setRotate(deg.toFloat(), oldBitmap.width.toFloat()/2.0f, oldBitmap.height.toFloat()/2.0f) | 224 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) | 225 postTranslate((w - oldBitmap.width).toFloat()/2.0f, (h - oldBitmap.height).toFloat()/2.0f) |
217 } | 226 } |
218 Canvas(newBitmap).run { | 227 binding.progressBar.visibility = ProgressBar.VISIBLE |
219 drawBitmap(oldBitmap, rotater, null) | 228 thread { |
220 } | 229 Canvas(newBitmap).run { |
221 setImage(newBitmap) | 230 drawBitmap(oldBitmap, rotater, null) |
231 } | |
232 runOnUiThread { | |
233 binding.progressBar.visibility = ProgressBar.INVISIBLE | |
234 setImage(newBitmap) | |
235 } | |
236 } | |
222 } | 237 } |
223 | 238 |
224 fun cancelClicked(view: View): Unit { | 239 fun cancelClicked(view: View): Unit { |
225 State.uri = null | 240 State.uri = null |
226 State.bitmap = null | 241 State.bitmap = null |