Отражение картинки через одномерный массив - C#

Узнай цену своей работы

Формулировка задачи:

Есть BMP 24bit изображение. Нужно с помощью консоли его отразить сверху вниз. Затем сохранить обратно (но в другой файл). Прочитать все байты из файла я могу, записать их в новый тоже. Отразить не получается...
Листинг программы
  1. using System;
  2. using System.IO;
  3. namespace ConsoleApplication1
  4. {
  5. class Program
  6. {
  7. static void Main(string[] args)
  8. {
  9. int jj = 0;//пустая переменная, пригодится
  10. byte[] bob = File.ReadAllBytes(@"D:\file.img");//считываем из файла в байтовый массив значение всех его байтов
  11. int a = bob[0] + bob[1] * 256;//ширина картинки
  12. int b = bob[2] + bob[3] * 256;//высота картинки
  13. int z = 3 * (a * b) + 54;//размер создаваемого изображения в байтах
  14. int[] readgto = new int[bob.Length];//int массив для временного хранения..
  15. byte[] buf = new byte[z];//байтовый массив в нем будет хранится готовое bmp изображение
  16. //=====
  17. buf[0] = 66;
  18. buf[1] = 77;
  19. buf[2] = 54;
  20. buf[3] = 64;
  21. buf[4] = 5;
  22. for (int tt2 = 5; tt2 <= 53; tt2++) { buf[tt2] = 0; }//описание в начале файла (чтоб комп понимал что это будет bmp)
  23. buf[10] = 54;
  24. buf[14] = 40;
  25. buf[26] = 1;
  26. buf[28] = 24;
  27. buf[35] = 64;
  28. buf[36] = 5;
  29. //=====
  30. int tt = 0;//пустая переменная, еще понадобится
  31. //НАЧАЛО КОНВЕРТАЦИИ
  32. for (int ii = 0; ii < bob.Length; ii++)
  33. {
  34. readgto[ii] = Convert.ToInt16(bob[ii]);//конвертируем массив байтов в числовой массив
  35. if ((ii >= 6) && (ii < (bob.Length - 6)))
  36. {
  37. if (ii == 6) { jj = ii + 48; tt++; }
  38. else { }
  39. buf[jj] = Convert.ToByte(readgto[ii++]);
  40. buf[jj + 1] = buf[jj + 2] = Convert.ToByte(readgto[ii - 1 + tt]);//преобразовываем этот отстойный формат в bmp
  41. jj += 3;
  42. if (ii > 6) { tt = 0; }
  43. else { }
  44. }
  45. }
  46. buf[18] = Convert.ToByte(readgto[0]);//помещаем в bmp картинку данные о размере
  47. buf[19] = Convert.ToByte(readgto[1]);
  48. buf[22] = Convert.ToByte(readgto[2]);
  49. buf[23] = Convert.ToByte(readgto[3]);
  50. //КОНЕЦ КОНВЕРТАЦИИ
  51. BinaryWriter abc = new BinaryWriter(File.Create(@"D:\file.bmp"));//создаем готовую bmp картинку
  52. abc.Write(buf);//в нее записываем массив байтов
  53. abc.Close();//и сохраняем
  54. Console.WriteLine("Файл «file.bmp» успешно сохранен.");//выводим сообщение об успешной конвертации
  55. Console.ReadLine();
  56. }
  57. }
  58. }
Изображение получается перевернутым сверху вниз... надо сделать чтоб все работало нормально...

Решение задачи: «Отражение картинки через одномерный массив»

textual
Листинг программы
  1. bmp.Save("file.jpg", ImageFormat.Jpeg);

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


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

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

6   голосов , оценка 3.833 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы