Advertisement
farum12

dzielenieObrazowWorker_DoWork

Jan 31st, 2017
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.45 KB | None | 0 0
  1.         private void dzielenieObrazowWorker_DoWork(object sender, DoWorkEventArgs e)
  2.         {
  3.             int procent = 0;
  4.             double maksimum = 0;
  5.  
  6.             gotowy = new Bitmap(obraz1.Width, obraz1.Height);
  7.             for (int y = 0; y < obraz1.Height; y++)
  8.             {
  9.                 procent = Convert.ToInt32((double)y / obraz1.Height * 100);
  10.                 progressBar.Invoke((MethodInvoker)delegate
  11.                 {
  12.                     progressBar.Value = procent;
  13.                 });
  14.                 for (int x = 0; x < obraz1.Width; x++)
  15.                 {
  16.                     Int32 R = obraz1.GetPixel(x, y).R;
  17.                     Int32 G = obraz1.GetPixel(x, y).G;
  18.                     Int32 B = obraz1.GetPixel(x, y).B;
  19.                     double[] sum = new double[3];
  20.                     sum[0] = (double)R + (double)obraz2.GetPixel(x, y).R;
  21.                     sum[1] = (double)G + (double)obraz2.GetPixel(x, y).G;
  22.                     sum[2] = (double)B + (double)obraz2.GetPixel(x, y).B;
  23.                     maksimum = Math.Max(maksimum, sum[0]);
  24.                     maksimum = Math.Max(maksimum, sum[1]);
  25.                     maksimum = Math.Max(maksimum, sum[2]);
  26.                 }
  27.             }
  28.  
  29.  
  30.             for (int y = 0; y < obraz1.Height; y++)
  31.             {
  32.                 procent = Convert.ToInt32((double)y / obraz1.Height * 100);
  33.                 progressBar.Invoke((MethodInvoker)delegate
  34.                 {
  35.                     progressBar.Value = procent;
  36.                 });
  37.                 for (int x = 0; x < obraz1.Width; x++)
  38.                 {
  39.                     Color zmiana;
  40.                     Int32 R = obraz1.GetPixel(x, y).R;
  41.                     Int32 G = obraz1.GetPixel(x, y).G;
  42.                     Int32 B = obraz1.GetPixel(x, y).B;
  43.  
  44.                     //R = R / Math.Max((Int32)obraz2.GetPixel(x, y).R,1);
  45.                    // G = G / Math.Max((Int32)obraz2.GetPixel(x, y).G, 1);
  46.                    // B = B / Math.Max((Int32)obraz2.GetPixel(x, y).B, 1);
  47.  
  48.                    
  49.                     double[] sum = new double[3];
  50.                     sum[0] = (double)R + (double)obraz2.GetPixel(x, y).R;
  51.                     sum[1] = (double)G + (double)obraz2.GetPixel(x, y).G;
  52.                     sum[2] = (double)B + (double)obraz2.GetPixel(x, y).B;
  53.                     //double maksimum = 0;
  54.  
  55.                     // ZNALEZIENIE WARTOSCI MAKSYMALNEJ Z SUM PIKSELI
  56.                     /*maksimum = Math.Max(maksimum, sum[0]);
  57.                     maksimum = Math.Max(maksimum, sum[1]);
  58.                     maksimum = Math.Max(maksimum, sum[2]);*/
  59.  
  60.                     double Rob;
  61.                     double Gob;
  62.                     double Bob;
  63.  
  64.                     if (maksimum == 0)
  65.                     {
  66.                         maksimum = 1;
  67.                     }
  68.                     Rob = (sum[0] * 255) / maksimum;
  69.                     Gob = (sum[1] * 255) / maksimum;
  70.                     Bob = (sum[2] * 255) / maksimum;
  71.  
  72.                     //R = (Int32)Rob;
  73.                     //G = (Int32)Gob;
  74.                     //B = (Int32)Bob;
  75.  
  76.                     Int32 R2 = obraz2.GetPixel(x, y).R;
  77.                     Int32 G2 = obraz2.GetPixel(x, y).G;
  78.                     Int32 B2 = obraz2.GetPixel(x, y).B;
  79.  
  80.                     R2 = Math.Max(R2, 1);
  81.                     G2 = Math.Max(G2, 1);
  82.                     B2 = Math.Max(B2, 1);
  83.  
  84.                     // ZWIĘKSZENIE WARTOŚCI WYJŚCIOWEJ PIKSELA, BY ZWIĘKSZYC KONTRAST
  85.                     R = (R / R2) * 255;
  86.                     G = (G / G2) * 255;
  87.                     B = (B / B2) * 255;
  88.                     // SKALOWANIE
  89.                     if (R > 255 || G > 255 || B > 255)
  90.                     {
  91.                         Int32 max = R;
  92.                         if (max < G)
  93.                         {
  94.                             max = G;
  95.                         }
  96.                         if (max < B)
  97.                         {
  98.                             max = B;
  99.                         }
  100.                         double X = (((double)max - 255) / 255);
  101.                         if (X > 1)
  102.                         {
  103.                             X = 1;
  104.                         }
  105.                         // -1 bo rzutowania nie są dokładne!!
  106.                         R = obraz2.GetPixel(x, y).R - (Int32)((double)(obraz2.GetPixel(x, y).R) * X) + obraz1.GetPixel(x, y).R - (Int32)((double)(obraz1.GetPixel(x, y).R) * X);
  107.                         G = obraz2.GetPixel(x, y).G - (Int32)((double)(obraz2.GetPixel(x, y).G) * X) + obraz1.GetPixel(x, y).G - (Int32)((double)(obraz1.GetPixel(x, y).G) * X);
  108.                         B = obraz2.GetPixel(x, y).B - (Int32)((double)(obraz2.GetPixel(x, y).B) * X) + obraz1.GetPixel(x, y).B - (Int32)((double)(obraz1.GetPixel(x, y).B) * X);
  109.  
  110.                         if (R > 255 || G > 255 || B > 255)
  111.                         {
  112.                             R -= 1;
  113.                             G -= 1;
  114.                             B -= 1;
  115.                         }
  116.                     }
  117.                    
  118.  
  119.                     zmiana = Color.FromArgb((Int32)Rob, (Int32)Gob, (Int32)Bob);
  120.                     gotowy.SetPixel(x, y, zmiana);
  121.                    
  122.  
  123.                 }
  124.             }
  125.             wynik.Invoke((MethodInvoker)delegate
  126.             {
  127.                 wynik.Image = gotowy;
  128.                 progressBar.Value = 0;
  129.                 zapiszButton.Enabled = true;
  130.             });
  131.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement