Bilder Auflösung ändern

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Samus Aran.

    Bilder Auflösung ändern

    Hallo,
    ich habe wieder mal ein kleines Problem:
    Ich habe einen Ordner in dem x Bilder mit verschiedenen Größen(Auflösungen)liegen und diese will ich jetzt jeweils auf eine Größe verkleinern bzw. vergrößern.
    Habs mit der Picturebox versucht doch leider ohne Erfolg.
    Das Bild wird abgespeichert nur in der selben Größe.

    VB.NET-Quellcode

    1. Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim strPath As String = "C:\...\testpics"
    3. Dim newpic As String = "C:\...\testpics\neuebilder"
    4. For Each file In My.Computer.FileSystem.GetFiles(strPath)
    5. PictureBox1.Load(file)
    6. PictureBox1.Size = New Size(1280, 720)
    7. Dim filename As String = My.Computer.FileSystem.GetName(strPath)
    8. PictureBox1.Image.Save(newpic & "\" & filename & ".png")
    9. Next


    Danke schonmal :)
    lolpicturebox.
    Öffne jedes Bild in nem Stream, skalier es, und speicher es wieder ab.
    Vergiss nicht, die Interpolationsmethode etc. auf die höchste Qualität zu stellen, um Qualitätsverluste zu vermeiden und vergiss auch nicht, jede Bitmap wieder zu disposen, sonst crasht dein Programm nach den ersten ~100 Bildern mit ner OutOfMemory-Exception.
    1.Wie kann ich das jeweilige Bild denn skalieren?

    2.Im Stream öffnen, so?

    VB.NET-Quellcode

    1. For Each File In My.Computer.FileSystem.GetFiles(strPath)
    2. Dim str As New System.IO.FileStream(File, IO.FileMode.Open)
    3. Dim pic As Bitmap
    4. pic = New Bitmap(str)
    5. str.Close()
    6. Next
    Ich schätze mal, dass das nicht mit normalen Bildern funktioniert.
    Da brauchst du Vektro-Bilder.
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Benutz "Using xyz as new stream/End Using" statt "dim xyz as new stream" und Close. Bei der Bitmap auch.
    Geh alle Dateien in ner For Each-Schleife durch, öffne es in nem Stream, erzeuge ein Bitmap-Objekt mit dem Stream, skalier die Bitmap und speicher sie in deinem Wunschformat (PNG) ab. (.Save)
    Hier C#-Code zum Skalieren einer Bitmap:

    C-Quellcode

    1. public static Bitmap ResizeImage(this Bitmap bm, int width, int height) {
    2. Bitmap result = new Bitmap(width, height, PixelFormat.Format24bppRgb);
    3. using (Graphics graphics = Graphics.FromImage(result)) {
    4. graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighSpeed;
    5. graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
    6. graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
    7. graphics.DrawImage(bm, 0, 0, result.Width, result.Height);
    8. }
    9. return result;
    10. }


    Da brauchst du Vektro-Bilder.
    Purer Schwachsinn. Und was sollen bitte "Vektro-Bilder" sein? Ich kenn Vektorgrafiken, und die haben mit dem Thema nichts zu tun.
    Eigentlich kann ich mit dem C# Code nichts anfangen.
    Habe ihn aber in vb conventiert und versucht anzupassen ,doch PixelFormat und Graphics.DarwImage werden unterstrichen.

    Habe glaube ich alles integriert
    Geh alle Dateien in ner For Each-Schleife durch, öffne es in nem Stream,
    erzeuge ein Bitmap-Objekt mit dem Stream, skalier die Bitmap und
    speicher sie in deinem Wunschformat (PNG) ab. (.Save)
    Edit : Jetzt wird nur noch Graphics.DrawImage unterstrichen

    VB.NET-Quellcode

    1. Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim strPath As String = "C:\...\testpics"
    3. For Each file As String In My.Computer.FileSystem.GetFiles(strPath)
    4. Dim filename As String = My.Computer.FileSystem.GetName(file)
    5. Using str As New System.IO.FileStream(file, IO.FileMode.Open)
    6. Dim pic As Bitmap
    7. pic = New Bitmap(str)
    8. End Using
    9. Dim bm As Bitmap
    10. Dim width As Integer
    11. Dim height As Integer
    12. Dim result As New Bitmap(width, height, Imaging.PixelFormat.Format24bppRgb)
    13. Using graphics__1 As Graphics = Graphics.FromImage(result)
    14. graphics__1.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighSpeed
    15. graphics__1.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
    16. graphics__1.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality
    17. Graphics.DrawImage(bm, 0, 0, result.Width, result.Height)
    18. End Using
    19. result.Save("C:\...\testpics\neuebilder" & filename & ".png")
    20. Next
    21. End Sub

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „cuese3“ ()

    Imports Gesetzt, und auch deklariert?
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Natürlich musst du das erzeugte Graphics-Objekt benutzen und nicht direkt "Graphics". Bei dir wäre das "graphics__1" oder so.
    Und vergiss nicht, alle Bitmaps entweder manuell zu disposen oder für jede Bitmap (bis auf result, weil das per return weitergegeben wird) Using zu nutzen.
    Danke habs auch grade herausgefunden :D
    Der code Funktioniert soweit ,nur sind alle Bilder die vom Programm ausgegeben werden schwarz.

    EDIT: Hab den Code etwas geändert und jetzt funktionierts. :thumbsup:
    Danke Samus Aran ohne deine Hilfe hätte ich dafür galube ich noch vile länger gebraucht :thumbsup:
    Auf jedne Fall ein fettes DANKE!


    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
    3. Dim strPath As String = "C:\Users\Alexej\Desktop\testpics"
    4. For Each file As String In My.Computer.FileSystem.GetFiles(strPath)
    5. Dim filename As String = My.Computer.FileSystem.GetName(file)
    6. Using str As New System.IO.FileStream(file, IO.FileMode.Open)
    7. Dim bm As Bitmap = New Bitmap(str)
    8. Dim width As Integer = 1280
    9. Dim height As Integer = 720
    10. Dim result As New Bitmap(width, height, Imaging.PixelFormat.Format24bppRgb)
    11. Using graphics__1 As Graphics = Graphics.FromImage(result)
    12. graphics__1.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighSpeed
    13. graphics__1.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
    14. graphics__1.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality
    15. graphics__1.DrawImage(bm, 0, 0, result.Width, result.Height)
    16. graphics__1.Dispose()
    17. result.Save("C:\Users\Alexej\Desktop\testpics\neuebilder" & "\" & filename & ".png")
    18. End Using
    19. End Using
    20. Next
    21. End Sub

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