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:
Und hier die Funktion die die Streifen zu einem Gesamtbild neu zusammensetzt:
So nun zu den Problemen:
- Muss der Streifen nicht 1 Pixel kleiner seien als oben berechnet, damit beim Rechteck keine Überlappung entsteht?
- 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
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:
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
- Public Sub F_Ausschneiden(ByVal DPI As Integer, ByVal LPI As Integer)
- StatusStrip1.Visible = True
- Dim Hoehe, BreiteEinesStreifen As Double
- Dim Linsenbreite, AnzahlAnLinsen, ReC_X_Start As Integer
- Dim AnzBilder As Integer = Bilderliste.Count
- Dim Img2 As Bitmap
- Linsenbreite = DPI / LPI
- AnzahlAnLinsen = PictureBox1.Image.Width / Linsenbreite
- BreiteEinesStreifen = Linsenbreite / Bilderliste.Count
- Hoehe = PictureBox1.Image.Height
- MsgBox("Linsenbreite:" + Linsenbreite.ToString + "Anzahl an Linsen:" + AnzahlAnLinsen.ToString + "Streifenbreite:" + BreiteEinesStreifen.ToString)
- ToolStripProgressBar1.Maximum = ((AnzahlAnLinsen - 1) * (Bilderliste.Count - 1))
- For StreifenIndex As Integer = 0 To AnzahlAnLinsen - 1
- For BildIndex As Integer = 0 To Bilderliste.Count - 1
- ReC_X_Start = StreifenIndex * BreiteEinesStreifen
- Dim Rechteck As New Rectangle(ReC_X_Start, 0, BreiteEinesStreifen, PictureBox1.Image.Height)
- Img2 = Bilderliste(BildIndex).Clone(Rechteck, Imaging.PixelFormat.DontCare)
- Teilbilder.Add(Img2)
- ToolStripProgressBar1.Increment(1)
- Next
- Next
- End Sub
Und hier die Funktion die die Streifen zu einem Gesamtbild neu zusammensetzt:
VB.NET-Quellcode
- Public Sub F_NeuesBilderstellen()
- 'Setzt das neue Bild zusammen
- Dim neueWidth, anzahl As Integer
- Dim Teilstk As Image
- anzahl = Teilbilder.Count - 1
- neueWidth = 0
- Dim GesBild As New Bitmap(PictureBox1.Image.Width, PictureBox1.Image.Height)
- Dim Graph As Graphics = Graphics.FromImage(GesBild)
- 'Graph.PageUnit = GraphicsUnit.Millimeter
- For index As Integer = 0 To anzahl
- PictureBox2.Image = Teilbilder(index)
- Teilstk = PictureBox2.Image
- Graph.DrawImage(Teilstk, neueWidth, 0)
- neueWidth = neueWidth + PictureBox2.Image.Width.ToString
- Next
- PictureBox3.Image = GesBild
- End Sub
So nun zu den Problemen:
- Muss der Streifen nicht 1 Pixel kleiner seien als oben berechnet, damit beim Rechteck keine Überlappung entsteht?
- 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