Dear All,
I have the below code capturing images from the camera using preview once every 10 seconds. The code works but it takes more than a second to write the image to the storage. The code first captures the camera image, Then it creates a BMP with the timestamp overlay and superimposes with the camera image and is written to storage. I request the gurus to look into the code and recommend if there is any other efficient way to accomplish the same using less resources like cpu and memory. Every advice is valuable to me.. Thank you...
I have the below code capturing images from the camera using preview once every 10 seconds. The code works but it takes more than a second to write the image to the storage. The code first captures the camera image, Then it creates a BMP with the timestamp overlay and superimposes with the camera image and is written to storage. I request the gurus to look into the code and recommend if there is any other efficient way to accomplish the same using less resources like cpu and memory. Every advice is valuable to me.. Thank you...
B4X:
Sub Camera1_Preview (PreviewPic() As Byte)
Try
Dim forDate As String
DateTime.DateFormat ="HH.mm.ss.SS_dd-MM-yy"
forDate=DateTime.Date(DateTime.now)
Dim Tcr As String
DateTime.DateFormat ="HH:mm:ss dd-MM-yyyy"
Tcr = DateTime.Date(DateTime.now)
' Dim Qstr As String
If DateTime.now > lastPreviewSaved + IntervalMs Then
Dim jpeg() As Byte = camEx.PreviewImageToJpeg(PreviewPic, 90)
'Save the image now
Dim tempstr As String
tempstr = forDate & "_" & Hostname & "_" '& "_" & "0.0_0.0"
Dim Filename As String = tempstr & ".jpeg"
camEx.SavePictureToFile(jpeg, File.DirRootExternal & "/aaa/Images/",Filename)
'Create the output folder if it does not exist
File.MakeDir(File.DirRootExternal,"Download/aaa/Images/")
btmp.InitializeMutable(640,480)
Canvas1.Initialize2(btmp)
Dim Bitmap1 As Bitmap
Bitmap1.Initialize(File.DirRootExternal & "/aaa/Images/",Filename)
Dim Rect1 As Rect
Rect1.Initialize(0,0,btmp.Width ,btmp.Height)
Canvas1.DrawRect(Rect1, Colors.Gray,True, 1dip)
Canvas1.DrawBitmap(Bitmap1,Null,Rect1)
Canvas1.DrawLine(btmp.Width -270,btmp.Height -20, btmp.Width -2, btmp.Height -20, Colors.Black , 16dip)
'Canvas1.DrawLine(
Canvas1.DrawText(Hostname & " - " & Tcr,btmp.Width -270,btmp.Height -15,Typeface.DEFAULT,15,Colors.White,"LEFT")
Dim out As OutputStream
out = File.OpenOutput(File.DirRootExternal, "/aaa/Images/" & tempstr & ".jpg", False)
Canvas1.Bitmap.WriteToStream(out,45,"JPEG")
out.Close
File.Delete (File.DirRootExternal & "/aaa/Images/",tempstr & ".jpeg")
Dim Filename As String = tempstr & ".jpg"
lastPreviewSaved = DateTime.now
End If
Catch
Log(LastException.Message)
End Try
End Sub