Spanish Imagen de 15 MB en Sqlite

dhernandez

Active Member
Licensed User
Longtime User
Buen dia tengo otro detalle.
Tengo una imagen de 15 que tomo con la camara, la trato de guardar en sqlite, pero por ser tan pesada no me completa la transaccion al momento de querer ver la imagen me marca error que no se puede abrir. imagino que por lo pesado.
hago lo siguiente no se que modificacion hacerle para que la imagen se transfiera completamente a sqlite.

B4X:
Dim InputStream3 As InputStream
                        InputStream3 = File.OpenInput(dir, filename)
                        Dim OutputStream3 As OutputStream
                        OutputStream3.InitializeToBytesArray(1000)
                             File.Copy2(InputStream3, OutputStream3)
                             Dim Buffer2() As Byte
                                   Buffer2 = OutputStream3.ToBytesArray
                                
                                   SQLfront.ExecNonQuery2("INSERT INTO T_ACTIVIDAD VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", Array As Object(Variables.empresa1,Variables.cserv1,Variables.personal_id1,Variables.fechahoy1,Variables.horahoy1,Variables.puesto1,Variables.act_mov1,Variables.Act_observ1,(Buffer2),Variables.act_gpslat1,Variables.act_gpslon1))

Tengo pensado aumentar esto:
B4X:
OutputStream3.InitializeToBytesArray(1000)
, de 1000 a no se 15000 por asi decirlo, estoy bien?
asi:
B4X:
OutputStream3.InitializeToBytesArray(15000)
 

JoanRPM

Active Member
Licensed User
Longtime User
Yo las imágenes las guardo en formato BLOB.
Mírate este tutorial: https://www.b4x.com/android/forum/threads/sql-tutorial.6736/

También intenta, si es posible, que la foto sea de menos resolución. Al final la base de datos pesará mucho y no será manejable.
Aqui tienes un ejemplo:
B4X:
Sub CreateScaledBitmap(Original As Bitmap, NewWidth As Int, NewHeight As Int) As Bitmap
    Dim r As Reflector
    Dim Bitmap1 As Bitmap

    Bitmap1 = r.RunStaticMethod("android.graphics.Bitmap", "createScaledBitmap", _
        Array As Object(Original, NewWidth, NewHeight, True), _
        Array As String("android.graphics.Bitmap", "java.lang.int", "java.lang.int", "java.lang.boolean"))
    Return Bitmap1
End Sub

Saludos.
 

dhernandez

Active Member
Licensed User
Longtime User
El anterior codigo lo hago para guardarlo en un campo blob, pero la imagen pesa mucho, puedes adaptar tu codigo y mi codigo para darme una idea??
 

dhernandez

Active Member
Licensed User
Longtime User
No he podido resolver el problema del peso de la imagen
 

JoanRPM

Active Member
Licensed User
Longtime User
No sé si te servirá. He cogido un trozo de mi programa.
En este caso, para la camara, utilizo la librería: VBFrontcam e inicializo en sub Globals: Dim FC As CameraFront ()

B4X:
Sub CreateScaledBitmap(Original As Bitmap, NewWidth As Int, NewHeight As Int) As Bitmap
    Dim r As Reflector
    Dim Bitmap1 As Bitmap

    Bitmap1 = r.RunStaticMethod("android.graphics.Bitmap", "createScaledBitmap", _
        Array As Object(Original, NewWidth, NewHeight, True), _
        Array As String("android.graphics.Bitmap", "java.lang.int", "java.lang.int", "java.lang.boolean"))
    Return Bitmap1
End Sub

Public Sub SaveBitmap(Dir As String, FileName As String, Picture As Bitmap)
   Dim Out As OutputStream = File.OpenOutput(Dir, FileName, False)
   Picture.WriteToStream(Out, 100, "JPEG")
   Out.Close
End Sub

Sub FC_PictureTaken (Data() As Byte)
       
        'guarda la foto
    Dim Out As OutputStream
    Out = File.OpenOutput(File.DirDefaultExternal, "Foto1.jpg", False)
    Out.WriteBytes(Data, 0, Data.Length)
    Out.Close

    DoEvents
        'redimensiona el BMP a 169 x 127 pixels y lo salva en Foto1LR (low resolution)
    Dim Bitmap1 As Bitmap
    Bitmap1.Initialize(File.DirDefaultExternal,"Foto1.jpg")
    SaveBitmap(File.DirDefaultExternal, "Foto1LR.jpg", CreateScaledBitmap(Bitmap1, 169, 127))

    ToastMessageShow("Image saved", True)
   
    FC.StopPreview
 
End Sub

Lo que hago en "Sub FC_PictureTaken" es guardar la foto en "Foto1.jpg", luedo redimensionar esta foto a "Foto1.jpg". Luego ya puedo cogerla para guardarla en la base de datos.
En el foro recomiendan hacer este paso intermedio (de guardar la foto en un fichero) y a mi me va bien.

Suerte.
 

dhernandez

Active Member
Licensed User
Longtime User
Excelente, he adaptado tu codigo y me corre perfecto. muhxas gracias por su ayuda @JoanRPM
 
Top