Spanish Se puede Girar una image?? [Solucionado]

Carlos marin

Active Member
Licensed User
Longtime User
Hola estimados.. no se si es posible pero guardo imágenes capturadas de cámara o de la misma galería y las muestro en un imageview, lo que quiero saber es si es posible girarlas y que guarden así giradas, para cuando las vuelta a mostrar... gracias
 

JordiCP

Expert
Licensed User
Longtime User
Hola Carlos,

¿Cómo las quieres girar? en modo espejo (horizontal o vertical), o rotando ? En este caso, ¿cualquier número de grados o 90,180,...?

Habrá alguna librería por ahí, pero se puede hacer dibujando el bitmap original con un canvas sobre otro bitmap y guardando el resultante.

Si pones algún ejemplo concreto de cómo las quieres girar, intento escribir el código
 

Carlos marin

Active Member
Licensed User
Longtime User
B4X:
Sub Activity_Create(FirstTime As Boolean)
   Dim NewImage As Bitmap = RotateImage(LoadBitmap(File.DirAssets, "MVC-748F.jpg"), 180)
   Dim iv As ImageView
   iv.Initialize("")
   Activity.AddView(iv, 0, 0, NewImage.Width, NewImage.Height)
   iv.SetBackgroundImage(NewImage)
   iv.Gravity = Gravity.FILL
End Sub

Sub RotateImage(original As Bitmap, degree As Float) As Bitmap
   Dim matrix As JavaObject
   matrix.InitializeNewInstance("android.graphics.Matrix", Null)
   matrix.RunMethod("postRotate", Array(degree))
   Dim bmp As JavaObject
   bmp.InitializeStatic("android.graphics.Bitmap")
   Dim NewImage As Bitmap = bmp.RunMethod("createBitmap", Array(original, 0, 0, original.Width, original.Height, _
     matrix, True))
   Return NewImage
End Sub
 

Carlos marin

Active Member
Licensed User
Longtime User
Hola Carlos,

¿Cómo las quieres girar? en modo espejo (horizontal o vertical), o rotando ? En este caso, ¿cualquier número de grados o 90,180,...?

Habrá alguna librería por ahí, pero se puede hacer dibujando el bitmap original con un canvas sobre otro bitmap y guardando el resultante.

Si pones algún ejemplo concreto de cómo las quieres girar, intento escribir el código

Hola jorgi gracias por la respuesta men, encontre esto de EREL ya con esto me dio. muchas gracias
 

Carlos marin

Active Member
Licensed User
Longtime User
fui demasiado lento :D

Jordi discúlpame que te moleste pero tengo una duda estoy empleado este código para guardarla cada vez que la giro. pero lo malo es que cada vez pierde calidad. al punto en que ya queda ilegible de tanto girarla, que puedo hacer?????...

mira el
código

B4X:
Dim B As Bitmap = NewImage
    Dim o As OutputStream
    o=File.OpenOutput(ruta,"/imagenes/placas/"&NombreImagenSeleccionada,False)
    B.WriteToStream(o,100,"JPEG")
    o.Close
 

JordiCP

Expert
Licensed User
Longtime User
Si la vas girando, es lógico que vaya perdiendo información y a la larga se deteriore.

Lo que podrías hacer es:
  • En vez de guardar la imagen rotada, guardas en un fichero la rotación aplicada
  • Entonces, cada vez que la cargues, aplicas la rotación a lo que presentes en pantalla (por ejemplo, 60 grados).
  • Si el usuario la rota por ejemplo 40 grados más en la misma direccíón, guardas en el fichero el valor de 100.
  • Así, la imagen original siempre queda intacta
 

Carlos marin

Active Member
Licensed User
Longtime User
jummm... bueno esa es buena idea.. pero no hay otra opción que sea guardar la foto?. lo digo por que las fotos las subo por ftp a un servidor entonces se me complica mas el controlar esto para un álbum o galería completa
 

JordiCP

Expert
Licensed User
Longtime User
Si la guardas rotada, y luego la recuperas y la vuelves a rotar y a guardar....al final siempre tendrás menos información (a no ser que las rotaciones sean de 90, 180,... y las guardes en un formato sin pérdidas). Por tanto no es buena idea...

  • Si el servidor es tuyo, y no necesitas que las imágenes tengan la extensión "jpg" o "png" porque ya sabes que son imagenes, siempre puedes codificar la información de rotación en el nombre del fichero o su extension ( p.ej., "primeraimagen.054", ...). Así cuando la bajes tendrás la imagen original y la información de rotación, y al presentarla en pantalla la aplicas.
  • Y cuando la modifiques, vuelves a enviar el mismo fichero con el nombre modificado (la nueva rotación como extensión) o incluso mejor cambias la extension del fichero remotamente (si es que el cliente ftp te lo permite)
 
Top