Picturebox - absolute Position des Bildes bestimmen

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Montoyafan.

    Picturebox - absolute Position des Bildes bestimmen

    Hallo,

    ich lade mit .LoadAsync() ein Bild von einem Laufwerk in eine Picturebox.
    Der SizeMode ist auf Zoom gestellt.

    Auf dem Bild möchte ich nun einen Button darstellen mit dem man das Bild löschen kann.


    Dieser Button ist jetzt am Rand der Picturebox ausgerichtet. Ich hätte es jetzt aber lieber so das dieser Button am Rand des eigentlichen Bildes ausgerichtet ist.
    Kann ich mit Boardmitteln die eigentliche Location des Bildes in der Picturebox bestimmen?

    Mit picbox.Image.GetBounds() bekomme ich nur die Maße des Originalbildes, nicht die tatsächlichen Maßes des dargestellten Bildes in der Picturebox.

    Hat jemand einen Tipp für mich?

    Danke
    Ohne es ausprobiert zu haben: Mit den ClientSize-Daten der PicBox und den Originalmaßen des Bildes lässt sich doch berechnen, welche Maße das gezoomte Bild hat und damit, wohin der LöschenButton soll. Aber wohin mit dem auf Deinem Bild? Da ist ja rechts kein Platz mehr? Was soll also geschehen, wenn
    1. das Bild sehr schmal ist, also viel Platz links und rechts ist
    2. das Bild fast so groß ist wie die PicBox, also für den Button zuwenig Platz da ist
    3. das Bild genauso so groß ist wie die PicBox
    4. das Bild etwas flacher als die PicBox ist
    5. das Bild sehr flach ist, also viel Platz oben und unten ist
    Bilder
    • ImageZoomCases.png

      6,97 kB, 673×422, 37 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Nun, wie geschrieben: Zoomfaktor ausrechnen, dann damit die tatsächliche Größe des Bildes ausrechnen und damit kannst Du dann den Button platzieren. Probier es Schritt für Schritt. Wenn Du nicht weiterkommst, gib bescheid, wo es konkret hängt.
    Bilder
    • moving delete button.gif

      3,19 MB, 528×380, 37 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    Mit den ClientSize-Daten der PicBox und den Originalmaßen des Bildes lässt sich doch berechnen, welche Maße das gezoomte Bild hat


    Danke, das war schon der Anstoß den ich gebraucht habe.
    Manchmal sieht man halt den Wald vor lauter Bäumen nicht :rolleyes:

    VB.NET-Quellcode

    1. Dim units As GraphicsUnit = GraphicsUnit.Point
    2. Dim rectangle As RectangleF = picbox.Image.GetBounds(units)
    3. Dim wFactor As Single = rectangle.Width / picbox.ClientSize.Width
    4. Dim hFactor As Single = rectangle.Height / picbox.ClientSize.Height
    5. Dim resizeFactor = Math.Max(wFactor, hFactor)
    6. Dim imageSize = New Size(CInt(rectangle.Width / resizeFactor), CInt(rectangle.Height / resizeFactor))
    7. Dim posX As Integer = 0
    8. Dim posY As Integer = 0
    9. Dim xOffset As Double = (picbox.Width - imageSize.Width) / 2
    10. Dim yOffset As Double = (picbox.Height - imageSize.Height) / 2
    11. Dim xPosRight As Double = imageSize.Width + xOffset
    12. Dim yPosRight As Double = yOffset
    13. posX = CInt(xPosRight - btnDeletePic.Width)
    14. posY = CInt(yPosRight)
    15. btnDeletePic.Location = New Point(posX, posY)


    Danke Dir