Hey Community,
bin gerade an einem sehr komplexen Programm & der Projektfortschritt beläuft sich auf ca. 35%.
Das Programm soll ein Textdokument einlesen & immer 3 Buchstaben [ASCII] in einen Pixel schreiben z.B [RGB: 212[Buchstabe1], 112[Buchs.2], 56[Buchst. 3]].
In meinem Code für den "Server" tauchen allerdings immer wieder Fehler auf, die ich nicht genaustens lösen kann bzw. nur ändern kann, so dass eine andere Fehlermeldung kommt. Hier der mein aktueller Code [Fehlerhafte Zeile ist rot markiert]:
In dieser roten Zeile taucht immer wieder der Fehler
IndexOutOfRangeException wurde nicht behandelt
Der Index war außerhalb des Arraybereiches auf.
Daraufhin versuchte ich das Problem zulösen, indem ich sogar praktischerweiße 4 Buchstaben in einer Farbe/Pixel speichern kann [Alpha, Rot, Grün, Blau] Dafür änderte ich die obere For|next-Schleife, sowie in der Source alle 28500000-Zahlen in 30000000-Zahlen:
Selbst hier bekomme ich immer noch den gleichen Fehler [IndexOutOfRangeException.. Der Index war außerhalb..]
Ich würde mich sehr freuen, wenn jemand Rat wüsste, wie ich das Problem lösen könnte. Ich bin mir sicher, es ist nur ein kleiner Fehler, aber ich hatte zu wenig Schlaf letzte Nacht, vielleicht erkenne ich ihn deswegen nicht
Achja, ich programmiere in Visual Basic Express 2011, falls das wichtig sein sollte^^
bis dahin,..
Fabian
bin gerade an einem sehr komplexen Programm & der Projektfortschritt beläuft sich auf ca. 35%.
Das Programm soll ein Textdokument einlesen & immer 3 Buchstaben [ASCII] in einen Pixel schreiben z.B [RGB: 212[Buchstabe1], 112[Buchs.2], 56[Buchst. 3]].
In meinem Code für den "Server" tauchen allerdings immer wieder Fehler auf, die ich nicht genaustens lösen kann bzw. nur ändern kann, so dass eine andere Fehlermeldung kommt. Hier der mein aktueller Code [Fehlerhafte Zeile ist rot markiert]:
VB.NET-Quellcode
- Imports FastGraphicsLib
- Public Class Form1
- Dim totalusedbytes As Integer = 0
- Dim totalpics As Integer = 0
- Dim ziel_id As String = "testziel"
- Dim Text1 As String = "abshfhsnfusfhsuhf1128374743838!hjhdfjdfh388734834hdfjhdfjf"
- Public Sub SetPixel(ByVal x As Integer, ByVal y As Integer, ByVal cl As Color)
- End Sub
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Dim newlength As Integer = Text1.Length - totalusedbytes
- If newlength >= 28500000 Then
- If totalpics = 0 Then
- routine(0, 28500000)
- Else
- 'Was passieren würde, wenn schon Bilder gezeichnet worden sind, aber immer noch genug Bytes
- 'in der Datei sind um ein "volles Picture" voll zu bekommen
- routine(totalusedbytes, (totalusedbytes + 28500000))
- End If
- Else
- 'Was passieren würde, wenn der Text bzw. die Datei weniger als 28,5Mil. Bytes enthält
- '[es wird automatisch ausgerechnet wieviel Pixel das Bild haben müsste um die "Niederigere Bytezahl"
- 'speichern zu können
- routine(totalusedbytes, Text1.Length)
- End If
- End Sub
- Public Sub routine(ByVal minlength As Integer, ByVal maxlength As Integer)
- Dim durchgang As Integer = 1
- Dim maxmin As Integer = maxlength - minlength
- Dim x As Single
- Dim c As Double
- Dim newbmp As Integer = maxmin / 3
- If Not newbmp = 28500000 Then
- c = Convert.ToDouble(newbmp)
- x = Math.Round(c)
- newbmp = x
- End If
- Dim img As FastGraphics = FastGraphics.FromBitmap(New Bitmap(newbmp, 1))
- For i As Integer = minlength To maxlength - 1 Step 3 '28,5 Mil.=9,5Mil.*3 [28,5M. ASCII-Zeichen passen in 3800x2500]
- Dim R As Integer = Convert.ToByte(Text1(i))
- Dim G As Integer = Convert.ToByte(Text1(i + 1))
- Dim B As Integer = Convert.ToByte(Text1(i + 2))
- Dim col As Color = Color.FromArgb(R, G, B)
- 'Pixel setzen
- img.SetPixel(durchgang, 1, col) 'Str(i) oder durchgang gibt die Zahl des "wievielten" Durchlauf's aus
- totalpics = totalpics + 1
- totalusedbytes = totalusedbytes + maxmin
- durchgang = durchgang + 1
- Next
- img.Bitmap.Save("C:/Users/******/" & minlength & "_" & maxlength & "_" & ziel_id & ".png")
- MsgBox("Congratulations! The application was successful! Thank you very much for taking part at our Alpha-Test!")
- End Sub
- End Class
In dieser roten Zeile taucht immer wieder der Fehler
IndexOutOfRangeException wurde nicht behandelt
Der Index war außerhalb des Arraybereiches auf.
Daraufhin versuchte ich das Problem zulösen, indem ich sogar praktischerweiße 4 Buchstaben in einer Farbe/Pixel speichern kann [Alpha, Rot, Grün, Blau] Dafür änderte ich die obere For|next-Schleife, sowie in der Source alle 28500000-Zahlen in 30000000-Zahlen:
VB.NET-Quellcode
- For i As Integer = minlength To maxlength - 1 Step 4 '30 Mil.=7,5Mil.*4 [30M. ASCII-Zeichen passen in 7500000x1px]
- Dim A As Integer = Convert.ToByte(Text1(i))
- Dim R As Integer = Convert.ToByte(Text1(i + 1))
- Dim G As Integer = Convert.ToByte(Text1(i + 2))
- Dim B As Integer = Convert.ToByte(Text1(i + 3))
- Dim col As Color = Color.FromArgb(A, R, G, B)
- 'Pixel setzen
- img.SetPixel(durchgang, 1, col) 'Str(i) oder durchgang gibt die Zahl des "wievielten" Durchlauf's aus
- totalpics = totalpics + 1
- totalusedbytes = totalusedbytes + maxmin
- durchgang = durchgang + 1
- Next
Selbst hier bekomme ich immer noch den gleichen Fehler [IndexOutOfRangeException.. Der Index war außerhalb..]
Ich würde mich sehr freuen, wenn jemand Rat wüsste, wie ich das Problem lösen könnte. Ich bin mir sicher, es ist nur ein kleiner Fehler, aber ich hatte zu wenig Schlaf letzte Nacht, vielleicht erkenne ich ihn deswegen nicht
Achja, ich programmiere in Visual Basic Express 2011, falls das wichtig sein sollte^^
bis dahin,..
Fabian
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „fabianpr“ ()