Interlacing von Bildern

  • VB.NET

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von blubberbaum.

    Interlacing von Bildern

    Hallo allerseits,

    mein Ziel war es ein Programm zu erstellen was das Interlacing von Bildern ermöglicht - wünscht sich meine Freundin von mir und es ist ja bald Weihnachten :)
    Jetzt habe ich davon allerdings keine Ahnung und auch meine VB-kenntnisse sind bei Grafik schnell erschöpft gewesen. Ich habe jedoch dank der Theme hier im Forum einen ersten Prototypen erstellt der jetzt noch einen Fehler enthält.
    Kurz kurz Theorie und zur Funktion des Programms:

    Spoiler anzeigen

    Gegeben ist die Anzahl der Linsen auf der Folie (LPI) sowie die Auflösung des Druckers (DPI). Weiterhin sind n Ausgangsbilder vorhanden die alle die selben Abmaße haben.
    Zuerst werden alle Bilder in eine Liste geladen. Danach wird aus LPI und DPI die Breite einer Linse (in Pixel) berechnet. Und damit dann bestimmt wie breit ein Streifen ist.
    Nun wird aus jedem der n Bilder der jeweilige Streifen ausgeschnitten und zum Schluss werden dann alle Streifen wieder zusammengesetzt. D.h. unter der ersten Linse ist der 1.Streife des ersten Bildes. .... der 1. Streifen des n. Bildes. Unter der zweiten Linse liegt der zweite Streife des ersten Bildes .... der zweite Streifen des n. Bildes.
    Legt man nun eine Lentigularfolie über dieses Streifenbild entsteht ein 3D-Effekt.


    Ich poste hier nur die beiden Funktionen die die eingentliche Arbeit machen und lege den kompletten Code dann in den Anhang.
    Zuerst die Funktion die aus den Bildern jeweils die Breite und Lage des Streifens berechnet und ausschneidet:

    VB.NET-Quellcode

    1. Public Sub F_Ausschneiden(ByVal DPI As Integer, ByVal LPI As Integer)
    2. StatusStrip1.Visible = True
    3. Dim Hoehe, BreiteEinesStreifen As Double
    4. Dim Linsenbreite, AnzahlAnLinsen, ReC_X_Start As Integer
    5. Dim AnzBilder As Integer = Bilderliste.Count
    6. Dim Img2 As Bitmap
    7. Linsenbreite = DPI / LPI
    8. AnzahlAnLinsen = PictureBox1.Image.Width / Linsenbreite
    9. BreiteEinesStreifen = Linsenbreite / Bilderliste.Count
    10. Hoehe = PictureBox1.Image.Height
    11. MsgBox("Linsenbreite:" + Linsenbreite.ToString + "Anzahl an Linsen:" + AnzahlAnLinsen.ToString + "Streifenbreite:" + BreiteEinesStreifen.ToString)
    12. ToolStripProgressBar1.Maximum = ((AnzahlAnLinsen - 1) * (Bilderliste.Count - 1))
    13. For StreifenIndex As Integer = 0 To AnzahlAnLinsen - 1
    14. For BildIndex As Integer = 0 To Bilderliste.Count - 1
    15. ReC_X_Start = StreifenIndex * BreiteEinesStreifen
    16. Dim Rechteck As New Rectangle(ReC_X_Start, 0, BreiteEinesStreifen, PictureBox1.Image.Height)
    17. Img2 = Bilderliste(BildIndex).Clone(Rechteck, Imaging.PixelFormat.DontCare)
    18. Teilbilder.Add(Img2)
    19. ToolStripProgressBar1.Increment(1)
    20. Next
    21. Next
    22. End Sub


    Und hier die Funktion die die Streifen zu einem Gesamtbild neu zusammensetzt:

    VB.NET-Quellcode

    1. Public Sub F_NeuesBilderstellen()
    2. 'Setzt das neue Bild zusammen
    3. Dim neueWidth, anzahl As Integer
    4. Dim Teilstk As Image
    5. anzahl = Teilbilder.Count - 1
    6. neueWidth = 0
    7. Dim GesBild As New Bitmap(PictureBox1.Image.Width, PictureBox1.Image.Height)
    8. Dim Graph As Graphics = Graphics.FromImage(GesBild)
    9. 'Graph.PageUnit = GraphicsUnit.Millimeter
    10. For index As Integer = 0 To anzahl
    11. PictureBox2.Image = Teilbilder(index)
    12. Teilstk = PictureBox2.Image
    13. Graph.DrawImage(Teilstk, neueWidth, 0)
    14. neueWidth = neueWidth + PictureBox2.Image.Width.ToString
    15. Next
    16. PictureBox3.Image = GesBild
    17. End Sub

    So nun zu den Problemen:

    - Muss der Streifen nicht 1 Pixel kleiner seien als oben berechnet, damit beim Rechteck keine Überlappung entsteht?

    VB.NET-Quellcode

    1. Dim Rechteck As New Rectangle(ReC_X_Start, 0, BreiteEinesStreifen, PictureBox1.Image.Height)


    - Als ich das Programm mit den Windows Beispielbildern (1024x768px) getestet habe hat es funktioniert. Nun mit den "echten" Bilder (511x1063px) sind plötzlich zusätzliche weiße Streifen zu sehen und die einzelnen Streifen sind auch nur zur Hälfte im Gesamtbild vorhanden. (Bilder sind 1,6MB groß. Ich habe sie als Zip hier hochgeladen)
    (- Angeblich soll das neu erstellte Bild die gleiche Breite und Höhe haben wie die Ausgangsbilder aber dann müsste doch von jedem Bild ein gewissen Teil verloren gehen?)


    Viele Grüße und Frohe Festtage.

    Blubber
    Dateien