bild skalieren und speichern

  • Allgemein

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von programmer71.

    bild skalieren und speichern

    Hallo Zusammen,
    Ich möchte gerne per VB ein Bild öffnen, es auf eine bestimmte Grösse skalieren und wieder speichern können. Leider weiss ich noch nicht genau wie ich das genau machen kann?!
    Könnt ihr mir helfen?

    P.S. Das Bild soll skaliert und nicht verzerrt werden.
    Speicher doch ein StretchImage:

    VB.NET-Quellcode

    1. Public Function BildSkalieren(ByVal Input As Bitmap, ByVal MaxSize As Size) As Bitmap
    2. Dim scalX As Double = MaxSize.Width / Input.Size.Width
    3. Dim scalY As Double = MaxSize.Height / Input.Size.Height
    4. Dim ScalRes As Double = 1
    5. If scalX > scalY Then ScalRes = scalY Else ScalRes = scalX
    6. Dim SizeX As Integer = CInt(Input.Size.Width * ScalRes)
    7. Dim SizeY As Integer = CInt(Input.Size.Height * ScalRes)
    8. Dim Bitmap As New Bitmap(SizeX, SizeY)
    9. Using graphics As Graphics = Graphics.FromImage(bimap)
    10. graphics.DrawImage(Input, 0, 0, SizeX, SizeY)
    11. End Using
    12. Return Bitmap
    13. End Function

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

    @Londi
    Einfach nach der Klassendeklarierung dies einfügen.

    VB.NET-Quellcode

    1. Public Class Form
    2. Public Function BildSkalieren(ByVal Input As Bitmap, ByVal MaxSize As Size) As Bitmap
    3. Dim scalX As Double = MaxSize.Width / Input.Size.Width
    4. Dim scalY As Double = MaxSize.Height / Input.Size.Height
    5. Dim ScalRes As Double = 1
    6. If scalX > scalY Then ScalRes = scalY Else ScalRes = scalX
    7. Dim SizeX As Integer = CInt(Input.Size.Width * ScalRes)
    8. Dim SizeY As Integer = CInt(Input.Size.Height * ScalRes)
    9. Dim Bitmap As New Bitmap(SizeX, SizeY)
    10. Using graphics As Graphics = Graphics.FromImage(Bitmap)
    11. graphics.DrawImage(Input, 0, 0, SizeX, SizeY)
    12. End Using
    13. Return Bitmap
    14. End Function


    Dann neue Funktion:

    VB.NET-Quellcode

    1. Public Function UnscaledBitmap(ByVal input As Bitmap, ByVal Size As Size) As Bitmap
    2. Dim Bitmap As New Bitmap(Size.Width, Size.Height)
    3. Using graphics As Graphics = Graphics.FromImage(Bitmap)
    4. graphics.DrawImage(input, 0, 0, Size.Width, Size.Height)
    5. End Using
    6. Return Bitmap
    7. End Function


    Dann:

    VB.NET-Quellcode

    1. Dim input As Bitmap = DirectCast(PictureBox1.Image, Bitmap)
    2. Dim ZielgrafikUnscaled As Bitmap = UnscaledBitmap(input, PictureBox1.Size)
    3. Dim ZielgrafikScaled As Bitmap = ScalBitmap(input, PictureBox1.Size)
    4. Zielgrafik.Save("C:\scaled.jpg", Imaging.ImageFormat.Jpeg)

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „programmer71“ ()

    @programmer71
    Wenn du schon den Code eins zu eins kopierst, dann lass die Beschreibung doch mit drin oder verlinke darauf^^
    [VB 2010] Stretch Image Speichern

    @Londi
    Die Funktionen erwarten eine Bitmap (also das Bild welches du 'verändern' willst) und eine Zielgröße (also die gewünschten Maße). Beide Methoden liefern dir eine Bitmap. Diese kannst du mittels .Save(...) speichern. Schau dir die Überladungen von .save() mal an - dort kannst du neben dem Pfad auch das Dateiformat (JPG, PNG, GIF, BMP, etc) angeben.

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

    @FreakJNS
    Sorry :D
    Hätte nicht gedacht, dass du das jetzt wiedererkennst. Aber nein. Klar. Der Code is von dir. Werde ich dann machen! Tut mir Leid. Ich dachte nur, dass dann der TE nicht so viel fragt, z. B. über Sachen die er nicht versteht.
    Also hoffe das ist jetzt nicht schlimm...

    programmer71 schrieb:

    Hätte nicht gedacht, dass du das jetzt wiedererkennst.
    @FreakJNS: ist nicht der Einzige, der seinen Code wiedererkennt. Wenn Du 1000 Beitrräge geschrieben hast, wirst Du das vllt auch können, sofern Du schon mehr als 3 Jahre in der Softwarebranche arbeitest. Oder waren es 5 Jahre?
    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!