German Zeichnen über ein Image

Wolli013

Well-Known Member
Licensed User
Longtime User
Hallo liebe Freunde,
Ich versuche gerade ein B4A Code in B4i zu übernehmen.
In B4A habe ich ein Panel genommen und ein Image reingeladen. danach mit Canvas über das Image gemalt.
Jetzt habe ich 2 Probleme in B4i und zwar,
In B4i kann man kein Image in ein Panel laden, nehme ich jetzt ein Imgage Wiev gibt es kein Touch mehr.
Also wer weiß welche alternativen man nehmen kann das man über ein Image zeichnen kann und es als gesamt Bild wieder speichert.


B4X:
Sub Bild_Bearbeitung


 PanelHGButton.Visible = True
 Panel1Signatur.Visible = True

    Dim bmp As B4XBitmap = xui.LoadBitmap(File.DirDocuments,TabStripMenue.tempImageFile)
     Dim TargetWidth, TargetHeight As Int
     TargetWidth = PanelSignaturePad.Width
     TargetHeight = PanelSignaturePad.Height       
        
        If File.Exists(File.DirDocuments, TabStripMenue.tempImageFile) Then
'            Dim Exif As ExifData
'            Exif.Initialize(File.DirDocuments, TabStripMenue.tempImageFile)
'            bmp = LoadBitmapSample(File.DirDocuments, TabStripMenue.tempImageFile, Max(TargetWidth, TargetHeight), Max(TargetWidth, TargetHeight))
'            Log("Orientation: " & Exif.getAttribute(Exif.TAG_ORIENTATION))
'           
'            Select Exif.getAttribute(Exif.TAG_ORIENTATION)
'                Case Exif.ORIENTATION_ROTATE_180 '3
'                    bmp = bmp.Rotate(180)
'                Case Exif.ORIENTATION_ROTATE_90 '6
'                    bmp = bmp.Rotate(90)
'                Case Exif.ORIENTATION_ROTATE_270 '8
'                    bmp = bmp.Rotate(270)
'            End Select

            'If Exif.getAttribute(Exif.TAG_ORIENTATION) = "0" Then bmp = bmp.Rotate(90)
            
            bmp = bmp.Resize(TargetWidth, TargetHeight, True)

             PanelSignaturePad.Width =     bmp.Width
             PanelSignaturePad.Height = bmp.Height
             PanelSignaturePad.SetBitmap(bmp)
             PanelSignaturePad.Left = 50%x - (PanelSignaturePad.Width/2)   
             PanelSignaturePad.SetBitmap(bmp)

        End If

    cvs.Initialize(PanelSignaturePad)   
    cvs.DrawRect(cvs.TargetRect, 0x00FFFFFF, True, 0)
    cvs.Invalidate


MetaDatum = $"$DateTime{DateTime.Now} - "$

End Sub

Private Sub PanelSignaturePad_Touch (Action As Int, X As Float, Y As Float)

    Select Action
        Case PanelSignaturePad.TOUCH_ACTION_DOWN
            LastX = X
            LastY = Y
        Case PanelSignaturePad.TOUCH_ACTION_MOVE
            cvs.DrawLine(LastX, LastY, X, Y, StrokeColor, StrokeWidth)
            cvs.DrawCircle (x, y, StrokeWidth/2, StrokeColor,  True, StrokeWidth/2)
            cvs.Invalidate
            LastX = X
            LastY = Y
    End Select
    
End Sub

Sub btnUnterschriftSave_Click
    
Msgbox2("Msg", "Soll das Bild jetzt gespeichert werden?", "Bestätigung", Array ("Ja", "Abbruch"))
Wait For Msg_Click (ButtonText As String)
If ButtonText = "Ja" Then

'Zusatzschrift
    LabelReturn.Visible = False
    LabelVerschiebeButton.Visible = False
    'EditText1.Enabled = False
    PanelSchiebe.Width = (PanelSchiebe.Width-45dip)
'Zusatzschrift

        PanelHGButton.Visible = False
         Panel1Signatur.Visible = False
         Sleep(300)
      
          Dim Obj1, Obj2 As Reflector
          Dim bmp As Bitmap
          Dim c As Canvas
          Obj1.Target = Obj1.GetActivityBA
          Obj1.Target = Obj1.GetField("vg")
          bmp.InitializeMutable(PanelSignaturePad.Width, PanelSignaturePad.Height)
          c.Initialize2(bmp)
          Dim args(1) As Object
          Dim types(1) As String
          Obj2.Target = c
          Obj2.Target = Obj2.GetField("canvas")
          args(0) = Obj2.Target
          types(0) = "android.graphics.Canvas"
          Obj1.RunMethod4("draw", args, types)

          Dim Out As OutputStream = File.OpenOutput(File.DirDocuments, TabStripMenue.tempImageFile, False)
          bmp.WriteToStream(Out, 98, "JPEG")
          Out.Close
          
            Main.NavControl.RemoveCurrentPage
    End If
End Sub
 

Alexander Stolte

Expert
Licensed User
Longtime User
Also wer weiß welche alternativen man nehmen kann das man über ein Image zeichnen kann und es als gesamt Bild wieder speichert.
 

Wolli013

Well-Known Member
Licensed User
Longtime User
Danke!
Aber wie lade ich da ein Hintergrundbild rein?
Im Beispiel ist es ja nicht vorhanden.
 

Alexander Stolte

Expert
Licensed User
Longtime User
Aber wie lade ich da ein Hintergrundbild rein?
Im Beispiel ist es ja nicht vorhanden.
Lade dir doch einfach das Beispiel Projekt herunter und schaue was du für Eigenschaften dort findest.
Die 3. Eigenschaft ist das was du brauchst BackgroundImage_setImage.
 

Wolli013

Well-Known Member
Licensed User
Longtime User
Versuche ich die ganze Zeit zu machen.
Nutze es direkt in B4i und nicht in B4X
So versuche ich es einzulesen und bekomme immer eine Fehlermeldung.

UIGraphicsBeginImageContext() failed to allocate CGBitampContext: size={0, 0}, scale=1.000000, bitmapInfo=0x2002. Use UIGraphicsImageRenderer to avoid this assert.


B4X:
Dim bmp As B4XBitmap = xui.LoadBitmap(File.DirDocuments,TabStripMenue.tempImageFile)
'BackgroundImage_setImage (image As B4XBitmap, KeepAspectRatio As Boolean) As String
ASDraw1.BackgroundImage_setImage(bmp,True)
 
Last edited:
Top