@@ -63,6 +63,7 @@ class MainActivity : AppCompatActivity() {
6363 private lateinit var inputImage: Mat
6464 private lateinit var outputImage: Mat
6565 private var menuSave: MenuItem ? = null
66+ private var menuPrevPerspective: MenuItem ? = null
6667 private var editMode = true
6768
6869 private val firstAnimatorListener = object : Animator .AnimatorListener {
@@ -184,8 +185,13 @@ class MainActivity : AppCompatActivity() {
184185
185186 override fun onCreateOptionsMenu (menu : Menu ? ): Boolean {
186187 menuInflater.inflate(R .menu.main_menu, menu)
188+
187189 menuSave = menu?.findItem(R .id.save)
188190 menuSave?.isEnabled = ! inputImage.empty()
191+
192+ menuPrevPerspective = menu?.findItem(R .id.prevPerspective)
193+ menuPrevPerspective?.isEnabled = ! inputImage.empty() && settings.prevHeight > 0
194+
189195 return true
190196 }
191197
@@ -206,6 +212,32 @@ class MainActivity : AppCompatActivity() {
206212 SettingsDialog .show(this )
207213 return true
208214 }
215+
216+ R .id.prevPerspective -> {
217+ if (settings.prevHeight < 1 ) return true
218+ if (inputImage.empty()) return true
219+
220+ binding.imageEdit.setPerspective(
221+ PointF (
222+ settings.prevLeftTopX * inputImage.width() / settings.prevWidth,
223+ settings.prevLeftTopY * inputImage.height() / settings.prevHeight
224+ ),
225+ PointF (
226+ settings.prevRightTopX * inputImage.width() / settings.prevWidth,
227+ settings.prevRightTopY * inputImage.height() / settings.prevHeight
228+ ),
229+ PointF (
230+ settings.prevLeftBottomX * inputImage.width() / settings.prevWidth,
231+ settings.prevLeftBottomY * inputImage.height() / settings.prevHeight
232+ ),
233+ PointF (
234+ settings.prevRightBottomX * inputImage.width() / settings.prevWidth,
235+ settings.prevRightBottomY * inputImage.height() / settings.prevHeight
236+ )
237+ )
238+
239+ return true ;
240+ }
209241 }
210242
211243 return super .onOptionsItemSelected(item)
@@ -361,6 +393,7 @@ class MainActivity : AppCompatActivity() {
361393 binding.radioButtonPointDirectionVertical.isEnabled = enabled
362394
363395 menuSave?.isEnabled = enabled
396+ menuPrevPerspective?.isEnabled = enabled && settings.prevHeight > 0
364397 }
365398
366399 private fun loadImage (uri : Uri ) : Mat {
@@ -435,6 +468,21 @@ class MainActivity : AppCompatActivity() {
435468 values.put(MediaStore .Images .Media .DATA , fileFullPath)
436469 values.put(MediaStore .Images .Media .MIME_TYPE , " image/${outputExtension} " )
437470 contentResolver.insert(MediaStore .Images .Media .EXTERNAL_CONTENT_URI , values)
471+
472+ val perspectivePoints = binding.imageEdit.getPerspective()
473+ settings.prevWidth = outputImage.width()
474+ settings.prevHeight = outputImage.height()
475+ settings.prevLeftTopX = perspectivePoints.pointLeftTop.x
476+ settings.prevLeftTopY = perspectivePoints.pointLeftTop.y
477+ settings.prevRightTopX = perspectivePoints.pointRightTop.x
478+ settings.prevRightTopY = perspectivePoints.pointRightTop.y
479+ settings.prevLeftBottomX = perspectivePoints.pointLeftBottom.x
480+ settings.prevLeftBottomY = perspectivePoints.pointLeftBottom.y
481+ settings.prevRightBottomX = perspectivePoints.pointRightBottom.x
482+ settings.prevRightBottomY = perspectivePoints.pointRightBottom.y
483+ settings.saveProperties()
484+
485+ menuPrevPerspective?.isEnabled = true
438486 }
439487
440488 showToast(" Saved to: $fileName " )
0 commit comments