2015-06-11 3 views
0

У меня есть эта ошибка на vb.net «невозможно прочитать за пределами потока». Это происходит, когда я скомпилирую программу, и она там ломается.Загрузите файлы на vb.net

Dim red As Byte = br.ReadByte() 
Dim green As Byte = br.ReadByte() 
Dim blue As Byte = br.ReadByte() 
Dim flags As Byte = br.ReadByte() 

Но я также даст весь код:

Public Shared Function LoadPal(filename As String) As List(Of Color) 
     Dim colors As New List(Of Color)() 
     Dim stream As New FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read) 
     Using br As New BinaryReader(stream) 
      ' RIFF header 
      Dim riff As String = ReadByteString(br, 4) 
      ' "RIFF" 
      Dim dataSize As Integer = br.ReadInt32() 
      Dim type As String = ReadByteString(br, 4) 
      ' "PAL " 
      ' Data chunk 
      Dim chunkType As String = ReadByteString(br, 4) 
      ' "data" 
      Dim chunkSize As Integer = br.ReadInt32() 
      Dim palVersion As Short = br.ReadInt16() 
      ' always 0x0300 
      Dim palEntries As Short = br.ReadInt16() 

      ' Colors 
      For i As Integer = 0 To palEntries - 1 
       Dim red As Byte = br.ReadByte() 
       Dim green As Byte = br.ReadByte() 
       Dim blue As Byte = br.ReadByte() 
       Dim flags As Byte = br.ReadByte() 
       ' always 0x00 
       colors.Add(Color.FromArgb(red, green, blue)) 
      Next 
     End Using 
     Return colors 
    End Function 


Private Shared Function ReadByteString(br As BinaryReader, length As Integer) As String 
     Return Encoding.ASCII.GetString(br.ReadBytes(length)) 
    End Function 
+0

Ваш файл имеет меньше байт, чем вы ожидаете там быть. Вы либо (1) неправильно читаете, либо (2) имеете поврежденный файл. –

ответ

0

Еще один счастливчик. Я надеюсь, что эта помощь поможет вам, но я не знаю, почему, но поддоны должны загружать 2 на 2, если не будут смешиваться цвета или что-то в этом роде.

для вызова нагрузки

''''''''''''''''''''''''''''''''' 
    Dim colors1 

    colerss = LoadPal(.FileName) 
''''''''''''''''''''''''''''''''' 

'LOAD PALL 
    Public Shared Function LoadPal(filename As String) As List(Of Color) 
     Dim colors As New List(Of Color)() 
     Dim stream As New FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read) 
    Using br As New BinaryReader(stream) 
     ' RIFF header 

     ' Colors 
     For i As Integer = 0 To 7 
      Try 
       ''''''''''''First'''''''''''''''' 
       Dim red As Byte = br.ReadByte() 
       Dim green As Byte = br.ReadByte() 
       Dim blue As Byte = br.ReadByte() 
       Dim flags As Byte = br.ReadByte() 
       'MsgBox(blue & " " & green & " " & red) 
       colors.Add(Color.FromArgb(blue, green, red)) 
       ''''''''''''''''''Second'''''''''''''''''''' 
       Dim red1 As Byte = br.ReadByte() 
       Dim green1 As Byte = br.ReadByte() 
       Dim blue1 As Byte = br.ReadByte() 
       Dim flags1 As Byte = br.ReadByte() 
       'MsgBox(blue1 & " " & green1 & " " & red1) 
       colors.Add(Color.FromArgb(blue1, green1, red1)) 
       ''''''''''''''''''''''''''''''''''''''''''''''' 
      Catch 
       MsgBox("Erro") 
      Finally 

      End Try 
     Next 
    End Using 
    Return colors 
End Function 

Private Shared Function ReadByteString(br As BinaryReader, length As Integer) As String 
     Return Encoding.ASCII.GetString(br.ReadBytes(length)) 
    End Function 

И почему нагрузки, если и может сохранить?

для вызова Сохранить

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 

SavePal(saveFileDialog1.FileName & "TheNameUWant.pal", colors1) 


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 

    'SAVE PAL 
Public Shared Sub SavePal(filename As String, colors As List(Of Color)) 
    ' Calculate file length 
    Dim stream As New FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.None) 
    Using bw As New BinaryWriter(stream) 
     ' Colors 
     For i = 0 To 15 
      'i dont know why but for insert the pallete i need change red whit blue and blue whit red 
      bw.Write(CByte(colors(i).B)) 
      bw.Write(CByte(colors(i).G)) 
      bw.Write(CByte(colors(i).R)) 
      ' Flag in W:A always 0x00 
      bw.Write(CByte(0)) 
     Next 
     WriteStringBytes(bw, "PAL ") 
    End Using 
End Sub 

Private Shared Sub WriteStringBytes(bw As BinaryWriter, value As String) 
     bw.Write(Encoding.ASCII.GetBytes(value)) 
    End Sub 
Смежные вопросы