VB Bildbearbeitung Picture in Picture einfügen

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von vangod.

    VB Bildbearbeitung Picture in Picture einfügen

    Hallo ich habe folgendes Problem, dass ich verzweifelt versuche über Vb ein kleines Bild in ein großes Bild (unten rechts) einzufügen
    Ist dies überhaupt möglich und wenn ja wie ?

    Und dies dann als neues Bild abspeichern.
    Klar geht das. Zeichne einfach mit GDI+ ein anderes Bild drüber.

    Beispielcode

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    3. With New OpenFileDialog With {.Filter = "Bilder|*.bmp;*.emf;*.exif;*.gif;*.jpg;*.jpeg;*.png;*.tiff;*.wmf|BMP-Bild|*.bmp|EMF-Bild|*.emf|EXIF-Bild|*.exif|GIF-Bild|*.gif|JPEG-Bild|*.jpg;*.jpeg|PNG-Bild|*.png|TIFF-Bild|*.tiff", .Title = "Bild 1 auswählen"}
    4. If .ShowDialog = Windows.Forms.DialogResult.OK Then
    5. Dim img As String = .FileName
    6. .Title = "Bild 2 auswählen"
    7. If .ShowDialog = Windows.Forms.DialogResult.OK Then
    8. Using sfd As New SaveFileDialog With {.Filter = "Bilder|*.bmp;*.emf;*.exif;*.gif;*.jpg;*.jpeg;*.png;*.tiff;*.wmf|BMP-Bild|*.bmp|EMF-Bild|*.emf|EXIF-Bild|*.exif|GIF-Bild|*.gif|JPEG-Bild|*.jpg;*.jpeg|PNG-Bild|*.png|TIFF-Bild|*.tiff", .Title = "Speicherort auswählen"}
    9. If sfd.ShowDialog = Windows.Forms.DialogResult.OK Then
    10. InsertImageIntoOtherImage(img, .FileName, sfd.FileName)
    11. End If
    12. End Using
    13. End If
    14. End If
    15. .Dispose()
    16. End With
    17. End Sub
    18. Sub InsertImageIntoOtherImage(ByVal imagepath1 As String, ByVal imagepath2 As String, ByVal savepath As String)
    19. Using image1 As Image = Image.FromFile(imagepath1)
    20. Using image2 As Image = Image.FromFile(imagepath2)
    21. Using gr As Graphics = Graphics.FromImage(image1)
    22. gr.DrawImage(image2, image1.Width - image2.Width, image1.Height - image2.Height)
    23. End Using
    24. image1.Save(savepath, GetCorrectFormat(IO.Path.GetExtension(savepath)))
    25. End Using
    26. End Using
    27. End Sub
    28. Function GetCorrectFormat(ByVal Extension As String) As Imaging.ImageFormat
    29. Select Case Extension.ToLower
    30. Case ".bmp"
    31. Return Imaging.ImageFormat.Bmp
    32. Case ".emf"
    33. Return Imaging.ImageFormat.Emf
    34. Case ".exif"
    35. Return Imaging.ImageFormat.Exif
    36. Case ".gif"
    37. Return Imaging.ImageFormat.Gif
    38. Case ".jpg", ".jpeg"
    39. Return Imaging.ImageFormat.Jpeg
    40. Case ".png"
    41. Return Imaging.ImageFormat.Bmp
    42. Case ".tiff"
    43. Return Imaging.ImageFormat.Tiff
    44. Case ".wmf"
    45. Return Imaging.ImageFormat.Wmf
    46. Case Else
    47. Throw New Exception("Extension """ & Extension & """ is unknown.")
    48. End Select
    49. End Function
    50. End Class
    Willkommen im Forum. :thumbup:
    Lass Dich nicht vin diesem vielen Code erschlagen. Wenn Du ihn versehst, i.O., wenn nicht, sieh Dir das hier an.
    Du kannst jedes Bild (Image, Bitmap) einem Graphics-Object zuordnen, in dieses malst Du das andere Bild imd speicherst das erste neu ab:

    VB.NET-Quellcode

    1. Dim large As New Bitmap("C:\Temp\large.bmp")
    2. Dim small As New Bitmap("C:\Temp\small.bmp")
    3. Dim gr As Graphics = Graphics.FromImage(large)
    4. gr.DrawImage(small, 30, 30)
    5. large.Save("c:\Temp\largeNew.bmp", Imaging.ImageFormat.Bmp)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Erstmal danke!
    Ich habe noch Probleme mit Exceptions die jetzt fliegen, weil ich vorher das Ausgangsbild in einer picturebox anzeigen lasse und ich aber nacher das alte bild mit dem "neue Bild" überschreiben möchte bzw. neue als tmp speichern und dann alte löschen und neue umbenennen zu alten Bildtitle. Leider fliegen da Exceptions und bekomme das nicht in den Griff, vielleicht weiß ja jemand mir zu helfen.

    VB.NET-Quellcode

    1. PictureBox3.Image = Image.FromFile(gespfad)
    2. 'wird dann in Picturebox3 angezeigt (dient als bildvorschau)
    3. 'nach dem Bild in Bild Prozess soll das Bild gespeichert werden und das alte "überschreiben"
    4. If My.Computer.FileSystem.FileExists(pfad + bildname + ".jpg") Then
    5. My.Computer.FileSystem.DeleteFile(pfad + bildname + ".jpg")
    6. End If
    7. Rename(pfad + bildname + "_tmp" + ".jpg", pfad + bildname + ".jpg")


    Problem ist das ich eine Exception bekomme, beim Löschvorgang wird das Bild noch von einem anderen Prozess benutzt (also von der Picturebox)
    wie kann ich das Problem lösen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „vangod“ ()