Bitmap = PictureBox.Image ?

  • VB.NET
  • .NET (FX) 4.0

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Drahuverar.

    Bitmap = PictureBox.Image ?

    Hallöle liebes Forum,

    ich habe ein kleines Problem:
    Ich wollte eine PictureBox nutzen um schnell mein Ziel zu erreichen.. allerdings hat es nicht so geklappt wie ich wollte. :D
    Wie so oft :rolleyes:

    Ich möchte kein Bildbearbeitungsprogramm programmieren oder Sonstiges ->
    Wenn ich ein Bild in eine PictureBox einlade würde ich gerne die Größe meiner PictureBox nutzen (Width & Height).
    Der SizeMode steht auf Zoom.

    Allerdings passiert nun folgendes:
    Ich lade ein Bild rein und erstelle mir eine Bitmap.

    VB.NET-Quellcode

    1. Dim Bild As New Bitmap(PictureBox1.Image)
    2. MsgBox("H: " & Bild.Height.ToString & vbCrLf & "B: " & Bild.Width.ToString)


    Leider bekomme ich die Originalwerte des Bildes.. Weswegen denn?
    Sollten die Werte nicht gleich der Größe meiner PictureBox sein?

    Grüße,
    Drahuverar
    Option Strict On!
    Ja, aber eben das wollte ich mir doch zu Nutzen machen, also dass meine PictureBox zoomt.
    Reinladen -> "ZOOM" -> neues Bild in der Größe.

    Ich dachte durch das speichern des Bildes aus der PictureBox in eine Bitmap hätte ich automatisch die Größe.
    Momentan hab' ich mich, glaube ich zumindest, darauf festgefahren.

    Wie kann ich das meiner Bitmap mitteilen, das sie im Grunde genau so aussehen soll wie meine PictureBox?

    Danke Dir für deine Zeit.

    Grüße
    Option Strict On!
    nein, eine Picturebox ist ein Control zur Anzeige von Images.
    Ist kein Bildverarbeitungs-Tool.

    der Bitmap kannst du solch überhaupt nicht sagen.
    Allenfalls kannst du eine neue Bitmap erstellen, von der neuen dir ein Graphics-Objekt holen und die erste Bitmap da hineinzeichnen, mit Graphics.DrawImage(bmp1).

    Dafür brauchst du dann aber auch gar keine Picturebox.
    Mache leider soooo selten etwas mit Bildern... deswegen kommen solche Faulheiten zustande.
    Wollte die PictureBox für den User nutzen und zeitgleich Schweinereien damit anstellen.

    Hast du vielleicht einen Link parat über .Graphics? Übungen etc.
    - Abgesehen von MSDN. X/

    (Bin gerade auf dem Sprung)

    Ansonsten Boxe ich mich mal durch.

    Also dein Ansatz ist:
    Bild aussuchen -> Bearbeiten -> Darstellen?

    Grüße,
    Drahuverar
    Option Strict On!
    Ich zitiere hier einfach mal einen post von StackOverflow:

    http://stackoverflow.com/a/15347148/3742982 schrieb:

    VB.NET-Quellcode

    1. #Region " ResizeImage "
    2. Public Overloads Shared Function ResizeImage(SourceImage As Drawing.Image, TargetWidth As Int32, TargetHeight As Int32) As Drawing.Bitmap
    3. Dim bmSource = New Drawing.Bitmap(SourceImage)
    4. Return ResizeImage(bmSource, TargetWidth, TargetHeight)
    5. End Function
    6. Public Overloads Shared Function ResizeImage(bmSource As Drawing.Bitmap, TargetWidth As Int32, TargetHeight As Int32) As Drawing.Bitmap
    7. Dim bmDest As New Drawing.Bitmap(TargetWidth, TargetHeight, Drawing.Imaging.PixelFormat.Format32bppArgb)
    8. Dim nSourceAspectRatio = bmSource.Width / bmSource.Height
    9. Dim nDestAspectRatio = bmDest.Width / bmDest.Height
    10. Dim NewX = 0
    11. Dim NewY = 0
    12. Dim NewWidth = bmDest.Width
    13. Dim NewHeight = bmDest.Height
    14. If nDestAspectRatio = nSourceAspectRatio Then
    15. 'same ratio
    16. ElseIf nDestAspectRatio > nSourceAspectRatio Then
    17. 'Source is taller
    18. NewWidth = Convert.ToInt32(Math.Floor(nSourceAspectRatio * NewHeight))
    19. NewX = Convert.ToInt32(Math.Floor((bmDest.Width - NewWidth) / 2))
    20. Else
    21. 'Source is wider
    22. NewHeight = Convert.ToInt32(Math.Floor((1 / nSourceAspectRatio) * NewWidth))
    23. NewY = Convert.ToInt32(Math.Floor((bmDest.Height - NewHeight) / 2))
    24. End If
    25. Using grDest = Drawing.Graphics.FromImage(bmDest)
    26. With grDest
    27. .CompositingQuality = Drawing.Drawing2D.CompositingQuality.HighQuality
    28. .InterpolationMode = Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
    29. .PixelOffsetMode = Drawing.Drawing2D.PixelOffsetMode.HighQuality
    30. .SmoothingMode = Drawing.Drawing2D.SmoothingMode.AntiAlias
    31. .CompositingMode = Drawing.Drawing2D.CompositingMode.SourceOver
    32. .DrawImage(bmSource, NewX, NewY, NewWidth, NewHeight)
    33. End With
    34. End Using
    35. Return bmDest
    36. End Function
    37. #End Region