Отражение картинки через одномерный массив - 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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д