Spanish Pegar Imágenes sobre otra imagen

lorenilla26

Member
Licensed User
Hola a todos, haber si alguien me puede ayudar....necesito hacer una app en B4A que permita pegar imágenes sobre otra imagen, algo así como si fueran "stickers" sobre una foto. Luego grabar esa imagen con sus "stickers". ¿Alguien tiene alguna idea de como podría hacerlo o ha hecho algo similar?

Gracias!
 

drgottjr

Expert
Licensed User
Longtime User
quizas asi:
para mi hay 2 opciones, ambos con imageview, sin que es dificil mostrar imagenes

la primera utiliza un "lienzo" (canvas) para colocar imagenes, texto, lo que sea sobre un imageview.
en este caso colocamos una imagen de freddie (halloween!) sobre la imagen de ti y tu amigo.
"pintamos" la imagen de freddie en el lienzo que descansa sobre el imageview. luego podemos
guarder el resultado en un archivo. claro, hay que trabajar un poquito para que la imagen de freddie
se localize en la ventana.

la secunda utiliza un panel sobre el que colocamos 2 imagenes. luego podemos guardar el resultado
en un archivo.

puede que haya otras maneras de realizar la misma tarea...

B4X:
Dim lorenilla As Bitmap = LoadBitmap(File.DirAssets,"lorenilla.jpg")
Dim freddie As Bitmap = LoadBitmapResize(File.DirAssets,"freddie.png",150,150,True)

' COLOCAR UNA IMAGEN SOBRE OTRA UTILIZANDO UN CANVAS
Dim imageview As ImageView
imageview.Initialize("iv")
Activity.AddView(imageview,0%x,-10%y,DipToCurrent(lorenilla.Width),DipToCurrent( lorenilla.Height))
imageview.Bitmap = lorenilla
imageview.Gravity = Gravity.CENTER
Dim canvas As Canvas
canvas.Initialize(imageview)
Dim destination As Rect
destination.Initialize(40,350,40+150,350+150)    ' para que freddie aparezca en la ventana
canvas.DrawBitmap(freddie, Null, destination)
' save canvas.bitmap
saveCanvas( canvas.Bitmap, "lorenilla1.jpg")

' AHORA CON 2 IMAGENES SOBRE UN SOLO IMAGEVIEW
Dim panel As Panel
panel.Initialize("pnl")
Activity.AddView(panel,0%x,50%y,100%x,50%y)
panel.Color = Colors.Yellow

Dim imageview2 As ImageView
imageview2.Initialize("iv")
panel.AddView(imageview2,0%x,0%y,DipToCurrent(lorenilla.Width),DipToCurrent( lorenilla.Height))
imageview2.Bitmap = lorenilla
imageview2.Gravity = Gravity.CENTER

Dim imageview3 As ImageView
imageview3.Initialize("iv")
panel.AddView(imageview3,30,225,30+150,225+150)
imageview3.Bitmap = freddie
imageview3.Gravity = Gravity.CENTER

Dim v As B4XView = panel
Dim bmp As Bitmap = v.Snapshot
saveCanvas(bmp, "lorenilla2.jpg")

End Sub

Sub saveCanvas( bmp As Bitmap, fname As String )
    Dim rp As RuntimePermissions
    Dim Out As OutputStream = File.OpenOutput(rp.GetSafeDirDefaultExternal(""),fname, False)
    bmp.WriteToStream(Out, 100, "JPEG")
    Out.Close
End Sub
 

Attachments

  • lorenilla1.jpg
    lorenilla1.jpg
    269.8 KB · Views: 59
  • lorenilla2.jpg
    lorenilla2.jpg
    245.7 KB · Views: 65
  • lorenilla3.png
    lorenilla3.png
    208.6 KB · Views: 60

TILogistic

Expert
Licensed User
Longtime User
B4X: (B4i, B4A, B4J)
Ejemplo simple pero educativo.

Note:
B4XDestRect = es la position donde deseas localizar las imágenes, puede tener mas de un rect para combinar posiciones.

B4X:
    Dim B4XDestRect As B4XRect
    B4XDestRect.Initialize(0dip, 0dip, B4XImageView1.mBase.Width, B4XImageView1.mBase.Height)

    Dim B4XCnvImage As B4XCanvas
    B4XCnvImage.Initialize(B4XImageView1.mBase)
    B4XCnvImage.DrawBitmap(xui.LoadBitmap(File.DirAssets, "sky.png"), B4XDestRect)
    B4XCnvImage.DrawBitmap(xui.LoadBitmap(File.DirAssets, "house.png"), B4XDestRect)

    B4XImageView1.Bitmap = B4XCnvImage.CreateBitmap
    B4XImageView1.mBase.Color = xui.Color_White
    B4XCnvImage.Invalidate

1666927121784.png
 

Attachments

  • testimage.zip
    59.2 KB · Views: 62
Top