Преобразование байта [] в изображение C# (ошибка ArgumentException) - PullRequest
0 голосов
/ 31 марта 2020

(я использую Google Translate, извините ..) Я пытаюсь сделать небольшой проект с сокращением. Я нашел похожие темы, но они не то, что мне нужно. Суть в том, что я получаю изображение на входе, преобразую его в byte [], затем в двоичный файл. (Здесь все в порядке) Затем я перевожу текст в двоичный файл. (Здесь все ок) в двоичном массиве я заменяю последние два бита на те, которые мне нужны. Я перевожу все обратно в byte [] (все в порядке)

, а затем я пытаюсь преобразовать byte [] в изображение, и возникает ошибка (неверный аргумент)

Если я не сделаю изменяется на двоичный, преобразование успешно (и я получаю то же изображение, которое я дал на входе).

изменить код в двоичном массиве:

public byte[] ShifrMessage(byte[] input, string message)
        {

            byte[] ConvertToByteArray(string str, Encoding encoding)
            {
                return encoding.GetBytes(str);
            }

            String ToBinary(Byte[] data)
            {
                return string.Join("", data.Select(byt => Convert.ToString(byt, 2).PadLeft(8, '0')));
            }

            //message in the binary
            var binaryString = ToBinary(ConvertToByteArray(message, Encoding.ASCII));

            byte[] ret = new byte[input.Length];


            for (int i = 0; i < ret.Length; i++)
            {
                string a = Convert.ToString(ret[i], 2).PadLeft(8, '0');


//changing the last two bits
                if (binaryString.Length >= 2)
                {
                    a = a.Substring(0, a.Length - 2) + binaryString.Substring(0, 2);
                    binaryString = binaryString.Substring(2);
                }
///

                byte b = StringToByte(a);
                ret[i] = b;
            }
            return ret;
        }

Я предполагаю, что при преобразовании Для Image проверяется целостность изображения, которое было изменено.

преобразование:

public Image byteArrayToImage(byte[] byteArrayIn)
        {
            using (var ms1 = new MemoryStream(byteArrayIn))
            {
                return Image.FromStream(ms1);
            }
        }

Можете ли вы сказать мне, в чем может быть проблема?

...