Не достаточно памяти при обработке изображений - C#

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

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

Сделал программу, начинающий программер, на моих системах х32 и х64 все выполняется отлично: после выполнения каждого цикла память сбрасывается до начального значения, при выполнении на системе друга выскакивает исключение(на скрине) и в диспетчере видно что память просто используется до придела суть программы в поиске преобладающего цвета на картинке. Я указываю папку с файлами и папку сохранения, дальше уже программно загружается каждый файл pictureBox и получаю из него каждый 10-й пиксель

Решение задачи: «Не достаточно памяти при обработке изображений»

textual
Листинг программы
  1. public static void pixels(Bitmap picture, string path_of_file, string pathToSave, string name_of_file)
  2.         {
  3.             string[] save_colours = new string[3];
  4.  
  5.             // kol-vo
  6.             uint[] cveta_kol = new uint[12]; // kol-vo kajdogo cveta
  7.            
  8.             byte[,] cveta =
  9.             {
  10.                // masive kodov cvetov
  11.  
  12.             };
  13.  
  14.             int[] summ = new int[cveta.GetUpperBound(0) + 1]; // symma modyley raznostey kanalov pixeley
  15.  
  16.             double hei = picture.Height;
  17.             double wid = picture.Width;
  18.  
  19.            
  20.                 #region if razmeri pikchi bolshe 500px
  21.  
  22.                 for (int i = 0; i < hei; i++) // visota
  23.                 {
  24.                     for (int j = 0; j < wid; j += 10) // shirina
  25.                     {
  26.                         Color myPix = picture.GetPixel(j, i);
  27.  
  28.                         for (int b = 0; b <= cveta.GetUpperBound(0); b++)
  29.                         {
  30.                             summ[b] = (int)(Math.Abs(cveta[b, 0] - myPix.R) + Math.Abs(cveta[b, 1] - myPix.G) + Math.Abs(cveta[b, 2] - myPix.B));
  31.                             // dlia opredilenia prinadlejnosti k cvetu:
  32.                             //  *1*  otnimaju ot main colors znachenije kanalov pixelov
  33.                         }
  34.                         int min = summ[0];
  35.                         for (int s = 0; s <= cveta.GetUpperBound(0); s++)
  36.                         {
  37.                             if (summ[s] < min) min = summ[s];   // gde min znachenie, k tomy cvety i otnositca
  38.                         }
  39.  
  40.                         if (min == summ[0]) cveta_kol[0]++;
  41.                         else if (min == summ[1]) cveta_kol[0]++;
  42.                         else if (min == summ[2]) cveta_kol[0]++;
  43.                         else if (min == summ[3]) cveta_kol[0]++;
  44.                         else if (min == summ[4]) cveta_kol[0]++;
  45.  
  46.                         else if (min == summ[5]) cveta_kol[1]++;
  47.                         else if (min == summ[6]) cveta_kol[1]++;
  48.                         else if (min == summ[7]) cveta_kol[1]++;
  49.                         else if (min == summ[8]) cveta_kol[1]++;
  50.                         else if (min == summ[9]) cveta_kol[1]++;
  51.                         else if (min == summ[10]) cveta_kol[1]++;
  52.  
  53.                         else if (min == summ[11]) cveta_kol[2]++;
  54.                         else if (min == summ[12]) cveta_kol[2]++;
  55.                         else if (min == summ[13]) cveta_kol[2]++;
  56.                         else if (min == summ[14]) cveta_kol[2]++;
  57.                         else if (min == summ[15]) cveta_kol[2]++;
  58.  
  59.                         else if (min == summ[16]) cveta_kol[3]++;
  60.                         else if (min == summ[17]) cveta_kol[3]++;
  61.                         else if (min == summ[18]) cveta_kol[3]++;
  62.                         else if (min == summ[19]) cveta_kol[3]++;
  63.                         else if (min == summ[20]) cveta_kol[3]++;
  64.                         else if (min == summ[21]) cveta_kol[3]++;
  65.                         else if (min == summ[22]) cveta_kol[3]++;
  66.                         else if (min == summ[23]) cveta_kol[3]++;
  67.                         else if (min == summ[24]) cveta_kol[3]++;
  68.                         else if (min == summ[25]) cveta_kol[3]++;
  69.                         else if (min == summ[26]) cveta_kol[3]++;
  70.                         else if (min == summ[27]) cveta_kol[3]++;
  71.  
  72.  
  73.                         else if (min == summ[28]) cveta_kol[4]++;
  74.                         else if (min == summ[29]) cveta_kol[4]++;
  75.                         else if (min == summ[30]) cveta_kol[4]++;
  76.                         else if (min == summ[31]) cveta_kol[4]++;
  77.                         else if (min == summ[32]) cveta_kol[4]++;
  78.                         else if (min == summ[33]) cveta_kol[4]++;
  79.                         else if (min == summ[34]) cveta_kol[4]++;
  80.                    
  81.                         else if (min == summ[35]) cveta_kol[5]++;
  82.                         else if (min == summ[36]) cveta_kol[5]++;
  83.                         else if (min == summ[37]) cveta_kol[5]++;
  84.                         else if (min == summ[38]) cveta_kol[5]++;
  85.                         else if (min == summ[39]) cveta_kol[5]++;
  86.                         else if (min == summ[40]) cveta_kol[5]++;
  87.                         else if (min == summ[41]) cveta_kol[5]++;
  88.  
  89.                         else if (min == summ[42]) cveta_kol[6]++;
  90.                         else if (min == summ[43]) cveta_kol[6]++;
  91.                         else if (min == summ[44]) cveta_kol[6]++;
  92.                         else if (min == summ[45]) cveta_kol[6]++;
  93.                         else if (min == summ[46]) cveta_kol[6]++;
  94.                         else if (min == summ[47]) cveta_kol[6]++;
  95.                         else if (min == summ[48]) cveta_kol[6]++;
  96.                         else if (min == summ[49]) cveta_kol[6]++;
  97.                         else if (min == summ[50]) cveta_kol[6]++;
  98.                         else if (min == summ[51]) cveta_kol[6]++;
  99.                         else if (min == summ[52]) cveta_kol[6]++;
  100.  
  101.                         else if (min == summ[53]) cveta_kol[7]++;
  102.                         else if (min == summ[54]) cveta_kol[7]++;
  103.                         else if (min == summ[55]) cveta_kol[7]++;
  104.                         else if (min == summ[56]) cveta_kol[7]++;
  105.                         else if (min == summ[57]) cveta_kol[7]++;
  106.                         else if (min == summ[58]) cveta_kol[7]++;
  107.                         else if (min == summ[59]) cveta_kol[7]++;
  108.  
  109.                         else if (min == summ[60]) cveta_kol[8]++;
  110.                         else if (min == summ[61]) cveta_kol[8]++;
  111.                         else if (min == summ[62]) cveta_kol[8]++;
  112.                         else if (min == summ[63]) cveta_kol[8]++;
  113.                         else if (min == summ[64]) cveta_kol[8]++;
  114.  
  115.                         else if (min == summ[65]) cveta_kol[9]++;
  116.                         else if (min == summ[66]) cveta_kol[9]++;
  117.                         else if (min == summ[67]) cveta_kol[9]++;
  118.                         else if (min == summ[68]) cveta_kol[9]++;
  119.                         else if (min == summ[69]) cveta_kol[9]++;
  120.                         else if (min == summ[70]) cveta_kol[9]++;
  121.                         else if (min == summ[71]) cveta_kol[9]++;
  122.                         else if (min == summ[72]) cveta_kol[9]++;
  123.  
  124.                         else if (min == summ[73]) cveta_kol[10]++;
  125.                         else if (min == summ[74]) cveta_kol[10]++;
  126.                         else if (min == summ[75]) cveta_kol[10]++;
  127.  
  128.                         else if (min == summ[76]) cveta_kol[11]++;
  129.                         else cveta_kol[11]++;
  130.                     }
  131.                 }
  132.                 #endregion
  133.    
  134.  
  135.            
  136.  
  137.             #region max1
  138.  
  139.             uint max1 = 0;
  140.  
  141.             for (int kol = 0; kol < cveta_kol.Length; kol++)
  142.             {
  143.                 if (cveta_kol[kol] > max1) max1 = cveta_kol[kol]; // find the first most popular colour on the picture
  144.             }
  145.  
  146.  
  147.             if (max1 == cveta_kol[0])
  148.             {
  149.                 save_colours[0] = name_of_file;
  150.                 save_colours[1] = "красный";
  151.                 cveta_kol[0] = 0;
  152.             }
  153.             else if (max1 == cveta_kol[1])
  154.             {
  155.                 save_colours[0] = name_of_file;
  156.                 save_colours[1] = "оранжевый";
  157.                 cveta_kol[1] = 0;
  158.             }
  159.             else if (max1 == cveta_kol[2])
  160.             {
  161.                 save_colours[0] = name_of_file;
  162.                 save_colours[1] = "желтый";
  163.                 cveta_kol[2] = 0;
  164.             }
  165.             else if (max1 == cveta_kol[3])
  166.             {
  167.                 save_colours[0] = name_of_file;
  168.                 save_colours[1] = "зеленый";
  169.                 cveta_kol[3] = 0;
  170.             }
  171.             else if (max1 == cveta_kol[4])
  172.             {
  173.                 save_colours[0] = name_of_file;
  174.                 save_colours[1] = "голубой";
  175.                 cveta_kol[4] = 0;
  176.             }
  177.             else if (max1 == cveta_kol[5])
  178.             {
  179.                 save_colours[0] = name_of_file;
  180.                 save_colours[1] = "синий";
  181.                 cveta_kol[5] = 0;
  182.             }
  183.             else if (max1 == cveta_kol[6])
  184.             {
  185.                 save_colours[0] = name_of_file;
  186.                 save_colours[1] = "фиолетовый";
  187.                 cveta_kol[6] = 0;
  188.             }
  189.             else if (max1 == cveta_kol[7])
  190.             {
  191.                 save_colours[0] = name_of_file;
  192.                 save_colours[1] = "розовый";
  193.                 cveta_kol[7] = 0;
  194.             }
  195.             else if (max1 == cveta_kol[8])
  196.             {
  197.                 save_colours[0] = name_of_file;
  198.                 save_colours[1] = "серый";
  199.                 cveta_kol[8] = 0;
  200.             }
  201.             else if (max1 == cveta_kol[9])
  202.             {
  203.                 save_colours[0] = name_of_file;
  204.                 save_colours[1] = "коричневый";
  205.                 cveta_kol[9] = 0;
  206.             }
  207.             else if (max1 == cveta_kol[10])
  208.             {
  209.                 save_colours[0] = name_of_file;
  210.                 save_colours[1] = "черный";
  211.                 cveta_kol[10] = 0;
  212.             }
  213.             else
  214.             {
  215.                 save_colours[0] = name_of_file;
  216.                 save_colours[1] = "белый";
  217.                 cveta_kol[11] = 0;
  218.             }
  219.  
  220.             // ****************************************************************
  221.  
  222.             uint max2 = 0;
  223.  
  224.             for (int kol = 0; kol < cveta_kol.Length; kol++)
  225.             {
  226.                 if (cveta_kol[kol] > max2) max2 = cveta_kol[kol]; // find the second most popular colour on the picture
  227.             }
  228.             if (Math.Round((double)max2 / max1, 2) <= 0.1) save_colours[2] = "---";
  229.             else
  230.             {
  231.                 if (max2 == cveta_kol[0])
  232.                 {
  233.                     save_colours[2] = "красный";
  234.                 }
  235.                 else if (max2 == cveta_kol[1])
  236.                 {
  237.                     save_colours[2] = "оранжевый";
  238.                 }
  239.                 else if (max2 == cveta_kol[2])
  240.                 {
  241.                     save_colours[2] = "желтый";
  242.                 }
  243.                 else if (max2 == cveta_kol[3])
  244.                 {
  245.                     save_colours[2] = "зеленый";
  246.                 }
  247.                 else if (max2 == cveta_kol[4])
  248.                 {
  249.                     save_colours[2] = "голубой";
  250.                 }
  251.                 else if (max2 == cveta_kol[5])
  252.                 {
  253.                     save_colours[2] = "синий";
  254.                 }
  255.                 else if (max2 == cveta_kol[6])
  256.                 {
  257.                     save_colours[2] = "фиолетовый";
  258.                 }
  259.                 else if (max2 == cveta_kol[7])
  260.                 {
  261.                     save_colours[2] = "розовый";
  262.                 }
  263.                 else if (max2 == cveta_kol[8])
  264.                 {
  265.                     save_colours[2] = "серый";
  266.                 }
  267.                 else if (max2 == cveta_kol[9])
  268.                 {
  269.                     save_colours[2] = "коричневый";
  270.                 }
  271.                 else if (max2 == cveta_kol[10])
  272.                 {
  273.                     save_colours[2] = "черный";
  274.                 }
  275.                 else
  276.                 {
  277.                     save_colours[2] = "белый";
  278.                 }
  279.             }
  280.             // ***********************************************************************
  281.             #endregion max1
  282.             save_func(pathToSave, save_colours);
  283.         }

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


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

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

7   голосов , оценка 4.429 из 5

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

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

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