Hi I wanted to take a picture on this page (B4XPage) sendpicture(most copied from Erel Sample and try to simplify), I have a layout with a panel and button , but I don't get anything , any help is welcome
B4X:
Sub Class_Globals
Private Root As B4XView 'ignore
Private xui As XUI 'ignore
Private btnTakePicture As Button
Private cam As CamEx2
Private panelCamera As Panel
Private rp As RuntimePermissions
Private MyTaskIndex As Int
Private VideoFileDir As String
End Sub
'You can add more parameters here.
Public Sub Initialize As Object
Return Me
End Sub
'This event will be called once, before the page becomes visible.
Private Sub B4XPage_Created (Root1 As B4XView)
Root = Root1
'load the layout to Root
Root.LoadLayout("sendpicture")
B4XPages.SetTitle(Me, "Take a Clear Picture")
OpenCamera(True)
End Sub
'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.
Private Sub btnTakePicture_Click
VideoFileDir = rp.GetSafeDirDefaultExternal("")
cam.Initialize(panelCamera)
Log(cam.SupportedHardwareLevel)
TakePicture
End Sub
Sub OpenCamera (front As Boolean)
rp.CheckAndRequest(rp.PERMISSION_CAMERA)
Wait For Activity_PermissionResult (Permission As String, Result As Boolean)
If Result = False Then
ToastMessageShow("No permission!", True)
Return
End If
Wait For (cam.OpenCamera(front)) Complete (TaskIndex As Int)
If TaskIndex > 0 Then
MyTaskIndex = TaskIndex 'hold this index. It will be required in later calls.
Wait For(PrepareSurface) Complete (Success As Boolean)
End If
Log("Start success: " & Success)
If Success = False Then
ToastMessageShow("Failed to open camera", True)
End If
End Sub
Sub PrepareSurface As ResumableSub
Log("prepare surface ok")
cam.PreviewSize.Initialize(1920, 1080)
Wait For (cam.PrepareSurface(MyTaskIndex)) Complete (Success As Boolean)
If Success Then cam.StartPreview(MyTaskIndex, False) ' false mean picture mode no video
Return Success
End Sub
Sub TakePicture
Try
Wait For(cam.FocusAndTakePicture(MyTaskIndex)) Complete (Data() As Byte)
cam.DataToFile(Data, VideoFileDir, "1.jpg")
Dim bmp As Bitmap = cam.DataToBitmap(Data)
Log("Picture taken: " & bmp) 'ignore
panelCamera.SetBackgroundImage(bmp.Resize(panelCamera.Width, panelCamera.Height, True)).Gravity = Gravity.CENTER
Sleep(4000)
Catch
Log("error not picture taken")
End Try
End Sub
Last edited: