Sub Process_Globals
Dim FlagCamaraAccionada As Boolean
Dim DirTMPFoto = "Nombre de la carpeta para fotos" as String
Dim AnchoImagenEnvio As Double
Dim AltoImagenEnvio As Double
Dim IndiceCalidadImagen As Int
Dim IndiceTamañoImagen As Int
' ...............
' ...............
' ...............
' ---------- Desde donde llames a hacer la foto --------------
' Borro la foto anterior ' si la quieres conservar cambiala de sitio
Try
File.Delete(DirTMPFoto,"foto.jpg")
Catch
End Try
IndiceCalidadImagen = 1 ' 100%
IndiceTamañoImagen = 2 ' Mediano
FlagCamaraAccionada = True
AbrirAplicacionCamara(DirTMPFoto, "foto.jpg")
' -----------------------------------------------------------
Sub AbrirAplicacionCamara(Directorio As String, NombreImagen As String)
Dim i As Intent
Try
i.Initialize("android.media.action.IMAGE_CAPTURE", "")
i.PutExtra("output", EventoCamara("file://" & File.Combine(Directorio, NombreImagen)))
StartActivity(i)
Catch
'Error al iniciar la cámara
FlagCamaraAccionada = False
' Puedes dar un mensaje de error
End Try
End Sub
Sub EventoCamara(FileName As String) As Object
Dim r As Reflector
Return r.RunStaticMethod("android.net.Uri", "parse", Array As Object(FileName), Array As String("java.lang.String"))
End Sub
Sub Activity_Resume
If FlagCamaraAccionada Then
FlagCamaraAccionada= False
If File.Exists(DirTMPFoto,"foto.jpg") Then CrearImagenRectaParaEnvio
End If
End Sub
Sub CrearImagenRectaParaEnvio
' se crea la imagen recta para enviarla
Dim calidad As Int
Dim TamañoMaximoImagen As Int
Dim XdivY As Double
Dim Bitmap1 As Bitmap
Try
Bitmap1.Initialize(DirTMPFoto,"foto.jpg")
Catch
' No se pudo cargar la Imagen
Log("CrearImagenRectaParaEnvio error Bitmap1 No se pudo cargar la Imagen de la foto")
Return
End Try
AnchoImagenEnvio = Bitmap1.Width
AltoImagenEnvio = Bitmap1.Height
' puedes crear la calidad de imagen que quieras
Select Case IndiceCalidadImagen
Case 1
calidad = 100 ' original
Case 2
calidad = 50 ' media
Case 3
calidad = 25 ' pequeña
End Select
' tamaño de la imagen en Pixel, puedes decirle el tamaño máximo que vas a crear de la imagen
' No le pasas ancho y alto, solo el tamaño máximo, el alto y ancho será proporcional a la foto realizada
Select Case IndiceTamañoImagen
Case 1
' Grande
TamañoMaximoImagen = 2048
Case 2
' Mediano
TamañoMaximoImagen = 1536
Case 3
' Pequeño
TamañoMaximoImagen = 1024
End Select
' calculo proporcion con los tamaños seleccionados
XdivY = AnchoImagenEnvio / AltoImagenEnvio
If XdivY >= 1 Then
' mas ancho que alto
AnchoImagenEnvio = TamañoMaximoImagen
AltoImagenEnvio = AnchoImagenEnvio / XdivY
Else
' mas alto que ancho
AltoImagenEnvio = TamañoMaximoImagen
AnchoImagenEnvio = AltoImagenEnvio * XdivY
End If
Log("IndiceTamañoImagen " & IndiceTamañoImagen )
Log("AnchoImagenEnvio " & AnchoImagenEnvio & " AltoImagenEnvio " & AltoImagenEnvio)
If AnchoImagenEnvio>0 And AltoImagenEnvio>0 Then
' reescalo
Bitmap1=CrearBitmapEscalado(Bitmap1,AnchoImagenEnvio,AltoImagenEnvio)
End If
' ---------------- solo si se va a visualizar o quieres enviar la imagen recta --------------
Dim grados As Float
grados=ExtraerGradosDelEXIF(DirTMPFoto,"foto.jpg")
If grados> 0 Then
' Girar Imagen
End If
' --------------------------------------------------------
' se salva la imagen con nueva calidad y giro ' si no lo usas quitalo
Dim out As OutputStream
Try
NombreImagenParaEnviar = "fotoOK.jpg" ' cuidado si se va a enviar varias muy seguidas hay que cambiar el nombre, se puede poner fecha y hora
out = File.OpenOutput(DirmTMPFoto ,NombreImagenParaEnviar, False) ' aqui pondria un directorio de fotos a enviar, en vez de emplear el mismo
Bitmap1.WriteToStream (out,calidad,"JPEG")
out.Close
Catch
Log("CrearImagenRectaParaEnvio error Bitmap1 No se pudo crear la Imagen final")
End Try
' descargar memoria
Bitmap1 = DescargarMemoriadeImagen(Bitmap1) ' crear un sub para descargar los bitmap, si se hacen muchas fotos cargamos la RAM
' AQUI ENVIAS
End sub
Sub CrearBitmapEscalado(Original As Bitmap, NewWidth As Int, NewHeight As Int) As Bitmap
Dim r As Reflector
Try
BitmapReescalar = r.RunStaticMethod("android.graphics.Bitmap", "createScaledBitmap", _
Array As Object(Original, NewWidth, NewHeight, False), _
Array As String("android.graphics.Bitmap", "java.lang.int", "java.lang.int", "java.lang.boolean"))
Catch
Log("Error CrearBitmapEscalado")
Return Original
End Try
Return BitmapReescalar
End Sub