Проблема в том, что вы берете данные изображения, притворяетесь, как текст, декодируете его в текст с использованием определенной кодировки, а затем записываете его в выходной поток с помощью StreamWriter
, который перекодирует текст"снова в байты, скорее всего, с использованием другой кодировки.Даже если вы использовали одну и ту же кодировку для чтения и записи, это было бы проблематично, поскольку не все байтовые массивы являются допустимым текстом, поэтому вы можете потерять некоторые данные при преобразовании (как перевод предложения с английского на испанский, а затем обратно изСнова испанский на английский).Однако, когда вы даже не используете одну и ту же кодировку в обоих направлениях, вы определенно не получите тот же результат.Поскольку это не текст, нет смысла превращать его в текст вообще.Просто оставьте это как ряд необработанных байтов и не изменяйте их значения.
Чтобы скопировать байты из исходного файла изображения в выходной поток, не внося никаких изменений в данные, вы можете сделать это следующим образом:
Using outputStream As New FileStream(outputPath, FileMode.Append, FileAccess.Write)
Dim imageBytes() As Byte = File.ReadAllBytes(imagePath)
outputStream.Write(imageBytes, 0, imageBytes.Length)
End Using
Или, еще лучше, еслиВы можете открыть исходный файл изображения в виде потока, вы можете сделать это так:
Using outputStream As New FileStream(outputPath, FileMode.Append, FileAccess.Write)
Using inputStream As New FileStream(imagePath, FileMode.Open, FileAccess.Read)
inputStream.CopyTo(outputStream)
End Using
End Using