Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private void dzielenieObrazowWorker_DoWork(object sender, DoWorkEventArgs e)
- {
- int procent = 0;
- double maksimum = 0;
- gotowy = new Bitmap(obraz1.Width, obraz1.Height);
- for (int y = 0; y < obraz1.Height; y++)
- {
- procent = Convert.ToInt32((double)y / obraz1.Height * 100);
- progressBar.Invoke((MethodInvoker)delegate
- {
- progressBar.Value = procent;
- });
- for (int x = 0; x < obraz1.Width; x++)
- {
- Int32 R = obraz1.GetPixel(x, y).R;
- Int32 G = obraz1.GetPixel(x, y).G;
- Int32 B = obraz1.GetPixel(x, y).B;
- double[] sum = new double[3];
- sum[0] = (double)R + (double)obraz2.GetPixel(x, y).R;
- sum[1] = (double)G + (double)obraz2.GetPixel(x, y).G;
- sum[2] = (double)B + (double)obraz2.GetPixel(x, y).B;
- maksimum = Math.Max(maksimum, sum[0]);
- maksimum = Math.Max(maksimum, sum[1]);
- maksimum = Math.Max(maksimum, sum[2]);
- }
- }
- for (int y = 0; y < obraz1.Height; y++)
- {
- procent = Convert.ToInt32((double)y / obraz1.Height * 100);
- progressBar.Invoke((MethodInvoker)delegate
- {
- progressBar.Value = procent;
- });
- for (int x = 0; x < obraz1.Width; x++)
- {
- Color zmiana;
- Int32 R = obraz1.GetPixel(x, y).R;
- Int32 G = obraz1.GetPixel(x, y).G;
- Int32 B = obraz1.GetPixel(x, y).B;
- //R = R / Math.Max((Int32)obraz2.GetPixel(x, y).R,1);
- // G = G / Math.Max((Int32)obraz2.GetPixel(x, y).G, 1);
- // B = B / Math.Max((Int32)obraz2.GetPixel(x, y).B, 1);
- double[] sum = new double[3];
- sum[0] = (double)R + (double)obraz2.GetPixel(x, y).R;
- sum[1] = (double)G + (double)obraz2.GetPixel(x, y).G;
- sum[2] = (double)B + (double)obraz2.GetPixel(x, y).B;
- //double maksimum = 0;
- // ZNALEZIENIE WARTOSCI MAKSYMALNEJ Z SUM PIKSELI
- /*maksimum = Math.Max(maksimum, sum[0]);
- maksimum = Math.Max(maksimum, sum[1]);
- maksimum = Math.Max(maksimum, sum[2]);*/
- double Rob;
- double Gob;
- double Bob;
- if (maksimum == 0)
- {
- maksimum = 1;
- }
- Rob = (sum[0] * 255) / maksimum;
- Gob = (sum[1] * 255) / maksimum;
- Bob = (sum[2] * 255) / maksimum;
- //R = (Int32)Rob;
- //G = (Int32)Gob;
- //B = (Int32)Bob;
- Int32 R2 = obraz2.GetPixel(x, y).R;
- Int32 G2 = obraz2.GetPixel(x, y).G;
- Int32 B2 = obraz2.GetPixel(x, y).B;
- R2 = Math.Max(R2, 1);
- G2 = Math.Max(G2, 1);
- B2 = Math.Max(B2, 1);
- // ZWIĘKSZENIE WARTOŚCI WYJŚCIOWEJ PIKSELA, BY ZWIĘKSZYC KONTRAST
- R = (R / R2) * 255;
- G = (G / G2) * 255;
- B = (B / B2) * 255;
- // SKALOWANIE
- if (R > 255 || G > 255 || B > 255)
- {
- Int32 max = R;
- if (max < G)
- {
- max = G;
- }
- if (max < B)
- {
- max = B;
- }
- double X = (((double)max - 255) / 255);
- if (X > 1)
- {
- X = 1;
- }
- // -1 bo rzutowania nie są dokładne!!
- 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);
- 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);
- 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);
- if (R > 255 || G > 255 || B > 255)
- {
- R -= 1;
- G -= 1;
- B -= 1;
- }
- }
- zmiana = Color.FromArgb((Int32)Rob, (Int32)Gob, (Int32)Bob);
- gotowy.SetPixel(x, y, zmiana);
- }
- }
- wynik.Invoke((MethodInvoker)delegate
- {
- wynik.Image = gotowy;
- progressBar.Value = 0;
- zapiszButton.Enabled = true;
- });
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement