Отражение картинки через одномерный массив - 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);