Удалить заголовок bmp для шифрования
Я довольно новичок в C# и получил этот проект шифрования AES на изображениях. Там, наверное, очень простая вещь, которую я здесь скучаю. Я пытаюсь удалить заголовок из BMP и зашифровать остальные, а затем добавить заголовок обратно. Если я не удаляю заголовок, программа работает хорошо. Чтобы удалить, я попытался это (заголовок bmp составляет 54 байта):
MyImage = new Bitmap("path");
MemoryStream ms = new MemoryStream();
MyImage.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
byte[] Header=null, picture=null, pictureFull = ms.ToArray();
for (int i = 0; i < pictureFull.Length; i++)
{
if (i < 54)
{ Header[i] = pictureFull[i]; }
else
{ picture[i - 54] = pictureFull[i]; }
}
byte[] demoKeyBytes = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f};
PaddingMode padding = PaddingMode.ISO10126;
EncryptedImg = EncryptCall(demoKeyBytes, padding, picture);
Проблема в том, что если я пытаюсь зашифровать и расшифровать "картинку", я получу нулевое значение. Я также получаю нулевое значение, если я перейду к enc/dec с полным изображением "pictureFull". Мне нужно полностью удалить FOR для того, чтобы программа обычно кодировала / dec "pictureFull", хотя это FOR даже не изменяет его. Есть ли другой способ сохранить массивы байтов [] или что-то не так?
2 ответа
byte[]
является объектом, поэтому вы не хотите инициализировать переменную этого типа null
, Вы, вероятно, хотите инициализировать Header
как это:
byte[] Header = new byte[54];
а также picture
к new byte[]
с длиной, по меньшей мере, равной фактической длине данных изображения, например:
byte[] picture = new byte[pictureFull.Length - 54];
Тогда вы можете скопировать вещи на них.
Попробуйте это вместо FOR:
byte[] pictureFull = ms.ToArray();
byte[] Header = pictureFull.Take(54);
byte[] picture = pictureFull.Skip(54);
и продолжить шифрование. PS Не забудьте добавить пространство имен System.Linq