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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.833 из 5
Похожие ответы