German B4A Wie korrekt ein Bild anzeigen lassen?

BenKhederSoftware

Member
Licensed User
Hallo
Ich möchte gerne ein Bild vom Smartphone auslesen und diesen in zwei Bilderboxen anzeigen.
Die eine soll das ganze Bild zeigen, die zweite soll das ganze Bild gerundet zeigen.
Das Problem ist, dass immer die Ausgabe verzerrt und teilweise Pixelig wird.
Wie kann man nun ein Bild richtig Anzeigen lassen? 😢
Habe leider noch keine Lösung gefunden.
Freue mich auf eure Hilfe.
Danke

Im Anhang:
Bildschirmaufnahme des Problems.
Quellcode als ZIP.

(Anhang gelöscht!)
 
Last edited:

BenKhederSoftware

Member
Licensed User
@Alexander Stolte
Vielen Dank, dieser Tipp hat mir bereits geholfen. :)

@an alle
Ich lese die Bilder nun mit dem B4XImageView Control aus.
Jetzt wird das Bild deutlich angezeigt!
Aber leider habe ich noch eine Kleinlichkeit die mir viel Zeit kostet.
Ich versuche, dass das Ergebnisbild rund angezeigt wird.
Außerdem möchte ich, dass es immer gleich rund wird.
Die Eigenschaften Round habe ich aktiviert außerdem den Corners Radius auf 55 gestellt.
Mein Ziel ist es, dass Bild schön gerundet angezeigt zu bekommen.
 

Attachments

  • bugappleider.png
    bugappleider.png
    71.2 KB · Views: 89

DonManfred

Expert
Licensed User
Longtime User
 

BenKhederSoftware

Member
Licensed User
@Alexander Stolte
Ja, ich habe Round aktiviert gehabt.
Habe auch ein 4.Eck gemacht, ging leider nicht.

@DonManfred
Vielen Dank, dieser Link hat mir sehr geholfen, ich könnte das Problem nun lösen.

@an alle
Hier die Lösung: 🤓

B4X:
Dim img As B4XBitmap = LoadBitmap(File.DirInternalCache, "tmp_img1.jpg")
B4XImageView1.Bitmap = CreateRoundBitmap(img,100dip)

'xui is a global XUI variable.
Sub CreateRoundBitmap(Input As B4XBitmap, Size As Int) As B4XBitmap
    If Input.Width <> Input.Height Then
        'if the image is not square then we crop it to be a square.
        Dim l As Int = Min(Input.Width, Input.Height)
        Input = Input.Crop(Input.Width / 2 - l / 2, Input.Height / 2 - l / 2, l, l)
    End If
    Dim c As B4XCanvas
    Dim xview As B4XView = xui.CreatePanel("")
    xview.SetLayoutAnimated(0, 0, 0, Size, Size)
    c.Initialize(xview)
    Dim path As B4XPath
    path.InitializeOval(c.TargetRect)
    c.ClipPath(path)
    c.DrawBitmap(Input.Resize(Size, Size, False), c.TargetRect)
    c.RemoveClip
    c.DrawCircle(c.TargetRect.CenterX, c.TargetRect.CenterY, c.TargetRect.Width / 2 - 2dip, xui.Color_White, False, 5dip) 'comment this line to remove the border
    c.Invalidate
    Dim res As B4XBitmap = c.CreateBitmap
    c.Release
    
    Return res
End Sub
 
Top