Отражение картинки через одномерный массив - C#
Формулировка задачи:
Есть BMP 24bit изображение. Нужно с помощью консоли его отразить сверху вниз. Затем сохранить обратно (но в другой файл). Прочитать все байты из файла я могу, записать их в новый тоже. Отразить не получается...
Изображение получается перевернутым сверху вниз... надо сделать чтоб все работало нормально...
using System; using System.IO; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int jj = 0;//пустая переменная, пригодится byte[] bob = File.ReadAllBytes(@"D:\file.img");//считываем из файла в байтовый массив значение всех его байтов int a = bob[0] + bob[1] * 256;//ширина картинки int b = bob[2] + bob[3] * 256;//высота картинки int z = 3 * (a * b) + 54;//размер создаваемого изображения в байтах int[] readgto = new int[bob.Length];//int массив для временного хранения.. byte[] buf = new byte[z];//байтовый массив в нем будет хранится готовое bmp изображение //===== buf[0] = 66; buf[1] = 77; buf[2] = 54; buf[3] = 64; buf[4] = 5; for (int tt2 = 5; tt2 <= 53; tt2++) { buf[tt2] = 0; }//описание в начале файла (чтоб комп понимал что это будет bmp) buf[10] = 54; buf[14] = 40; buf[26] = 1; buf[28] = 24; buf[35] = 64; buf[36] = 5; //===== int tt = 0;//пустая переменная, еще понадобится //НАЧАЛО КОНВЕРТАЦИИ for (int ii = 0; ii < bob.Length; ii++) { readgto[ii] = Convert.ToInt16(bob[ii]);//конвертируем массив байтов в числовой массив if ((ii >= 6) && (ii < (bob.Length - 6))) { if (ii == 6) { jj = ii + 48; tt++; } else { } buf[jj] = Convert.ToByte(readgto[ii++]); buf[jj + 1] = buf[jj + 2] = Convert.ToByte(readgto[ii - 1 + tt]);//преобразовываем этот отстойный формат в bmp jj += 3; if (ii > 6) { tt = 0; } else { } } } buf[18] = Convert.ToByte(readgto[0]);//помещаем в bmp картинку данные о размере buf[19] = Convert.ToByte(readgto[1]); buf[22] = Convert.ToByte(readgto[2]); buf[23] = Convert.ToByte(readgto[3]); //КОНЕЦ КОНВЕРТАЦИИ BinaryWriter abc = new BinaryWriter(File.Create(@"D:\file.bmp"));//создаем готовую bmp картинку abc.Write(buf);//в нее записываем массив байтов abc.Close();//и сохраняем Console.WriteLine("Файл «file.bmp» успешно сохранен.");//выводим сообщение об успешной конвертации Console.ReadLine(); } } }
Решение задачи: «Отражение картинки через одномерный массив»
textual
Листинг программы
bmp.Save("file.jpg", ImageFormat.Jpeg);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д