Skip to content

Commit

Permalink
feat: ✨ switch between original Cv Frame to Fit to Canvas Mode logic …
Browse files Browse the repository at this point in the history
…added

Signed-off-by: Onuralp SEZER <thunderbirdtr@gmail.com>
  • Loading branch information
onuralpszr committed Jan 14, 2024
1 parent 14860b3 commit 174218e
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 13 deletions.
32 changes: 27 additions & 5 deletions app/src/main/java/com/os/cvCamera/ExtendJavaCamera2View.kt
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ class ExtendJavaCamera2View(context: Context, attrs: AttributeSet? = null) :
private val mMatrix: Matrix = Matrix()
private var mCacheBitmap: Bitmap? = null
private var mListener: CvCameraViewListener2? = null
private var mFitToCanvas : Boolean = true

private fun updateMatrix() {
val mw: Float = this.width.toFloat()
Expand Down Expand Up @@ -51,18 +52,25 @@ class ExtendJavaCamera2View(context: Context, attrs: AttributeSet? = null) :

override fun layout(l: Int, t: Int, r: Int, b: Int) {
super.layout(l, t, r, b)
updateMatrix()
if (mFitToCanvas) updateMatrix()
}

override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec)
updateMatrix()
if (mFitToCanvas) updateMatrix()
}

override fun deliverAndDrawFrame(frame: CvCameraViewFrame?) {
val modified: Mat? = if (mListener != null) {
mListener?.onCameraFrame(frame)
} else {

if (!mFitToCanvas)
super.deliverAndDrawFrame(frame)
else
deliverAndDrawFrame2(frame)
}

private fun deliverAndDrawFrame2(frame:CvCameraViewFrame?)
{
val modified: Mat? = if (mListener != null) mListener?.onCameraFrame(frame) else {
frame!!.rgba()
}

Expand Down Expand Up @@ -121,7 +129,21 @@ class ExtendJavaCamera2View(context: Context, attrs: AttributeSet? = null) :
}
}


fun setFitToCanvas(fitToCanvas: Boolean) {
mFitToCanvas = fitToCanvas
}

fun getFitToCanvas(): Boolean {
return mFitToCanvas
}


override fun AllocateCache() {
if (!mFitToCanvas) {
super.AllocateCache()
return
}
mCacheBitmap = Bitmap.createBitmap(mFrameWidth, mFrameHeight, Bitmap.Config.ARGB_8888)
}

Expand Down
23 changes: 15 additions & 8 deletions app/src/main/java/com/os/cvCamera/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,6 @@ class MainActivity : CameraActivity(), CvCameraViewListener2 {

binding.bottomAppBar.setOnMenuItemClickListener { menuItem ->
when (menuItem.itemId) {
R.id.flashlight -> {
true
}

R.id.about -> {
// Get app version and githash from BuildConfig
Expand All @@ -106,22 +103,26 @@ class MainActivity : CameraActivity(), CvCameraViewListener2 {
true
}

R.id.grayscale -> {
R.id.filters -> {
// Toggle between grayscale,toSepia,toPencilSketch,toSobel,toCanny
mFilterId = when (mFilterId) {
-1 -> {
Toast.makeText(this, getString(R.string.grayscale_filter), Toast.LENGTH_SHORT).show()
0
}

0 -> {
Toast.makeText(this, getString(R.string.sepia_filter), Toast.LENGTH_SHORT).show()
1
}

1 -> {
Toast.makeText(this, getString(R.string.sobel_filter), Toast.LENGTH_SHORT).show()
2
}

2 -> {
Toast.makeText(this, getString(R.string.canny_filter), Toast.LENGTH_SHORT).show()
3
}

Expand All @@ -138,10 +139,18 @@ class MainActivity : CameraActivity(), CvCameraViewListener2 {
true
}

R.id.resizeCanvas -> {
binding.CvCamera.disableView()
binding.CvCamera.setFitToCanvas(!binding.CvCamera.getFitToCanvas())
binding.CvCamera.enableView()
true
}

else -> {
false
}
}

}
}

Expand Down Expand Up @@ -231,14 +240,12 @@ class MainActivity : CameraActivity(), CvCameraViewListener2 {
}

private fun cvFilters(frame: Mat): Mat {
when (mFilterId) {
return when (mFilterId) {
0 -> {
Toast.makeText(this, "Grayscale 0", Toast.LENGTH_SHORT).show()
frame.toGray()
}

1 -> {
Toast.makeText(this, "Sepia 1", Toast.LENGTH_SHORT).show()
frame.toSepia()
}

Expand All @@ -250,9 +257,9 @@ class MainActivity : CameraActivity(), CvCameraViewListener2 {
frame.toCanny()
}

else -> frame
}

return frame
}

override fun onDestroy() {
Expand Down

0 comments on commit 174218e

Please sign in to comment.