Hi everyone, i know there are some posts about stretching of the preview of the cameraEx, (one of them is mine) but them are related to resize correctly the panel containing the preview.
Instead, i wish to know if there is a way to keep the preview panel size fixed (square), but have the camera feed with the correct aspect ratio (basically crop it to square)
now it looks like this (and it's a copy-paste of the virgin example project):
The preview panel width / height ratio should be the same as the preview size ratio. You have two options:
1. Set the preview size to be a square.
2. Put panels over the preview panel to hide the extra areas and leave a square hole. This will be much faster than cropping the preview frames.
i also tried setting the previewsize ot 720x720 (that is a supported size).. nothing
but I get the following error:
B4X:
facing: 0, 0
Error occurred on line: 175 (CameraExClass)
java.lang.NoSuchMethodException: setPreviewSize [int, int]
at java.lang.Class.getMethod(Class.java:2068)
at java.lang.Class.getDeclaredMethod(Class.java:2047)
at anywheresoftware.b4a.agraham.reflection.Reflection.runmethod(Reflection.java:214)
at anywheresoftware.b4a.agraham.reflection.Reflection.RunMethod3(Reflection.java:834)
at biquadrolab.ecobi55.cameraexclass._setpreviewsize(cameraexclass.java:117)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:732)
at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:348)
at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:255)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:144)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:193)
at anywheresoftware.b4a.shell.DebugResumableSub$RemoteResumableSub.resume(DebugResumableSub.java:22)
at anywheresoftware.b4a.BA.checkAndRunWaitForEvent(BA.java:267)
at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:137)
at anywheresoftware.b4a.BA$2.run(BA.java:387)
at android.os.Handler.handleCallback(Handler.java:907)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:216)
at android.app.ActivityThread.main(ActivityThread.java:7625)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)
** Activity (main) Pause event (activity is not paused). **
** Service (starter) Destroy (ignored)**
on this line in the CameraEx class:
B4X:
Public Sub SetPreviewSize(Width As Int, Height As Int)
r.target = parameters
r.RunMethod3("setPreviewSize", Width, "java.lang.int", Height, "java.lang.int")
End Sub
camEx.Initialize(pnlQrPreview, False, Me, "Camera1")
Wait For Camera1_Ready (Success As Boolean)
If Success Then
camEx.SetContinuousAutoFocus
Dim maxCameraSize As CameraSize = findLargestSquarePreviewSize
camEx.SetPreviewSize(maxCameraSize.Width, maxCameraSize.Height)
camEx.CommitParameters
camEx.StartPreview
prgQrLoading.Visible = False
Else
ToastMessageShow("Errore apertura camera", False)
StopCamera
End If
I made this function to find the largest square previewsize
B4X:
Private Sub findLargestSquarePreviewSize As CameraSize
Dim result As CameraSize = camEx.GetPreviewSize
For Each c As CameraSize In camEx.GetSupportedPreviewSizes
If (c.Width == c.Height) And ((c.Width > result.Width) Or (result.Height <> result.Width)) Then
result = c
End If
Next
Return result
End Sub