Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- namespace Praktikum12
- {
- public partial class Form1 : Form
- {
- Bitmap objBitmap1;
- public Form1()
- {
- InitializeComponent();
- }
- public double[] RgbToCIE(int r, int g, int b)
- {
- float Rx = r; float Gx = g; float Bx = b;
- double X = 0.723 * Rx + 0.273 * Gx + 0.166 * Bx;
- double Y = 0.265 * Rx + 0.717 * Gx + 0.008 * Bx;
- double Z = 0.000 * Rx + 0.008 * Gx + 0.824 * Bx;
- double x = X / (X + Y + Z);
- double y = Y / (X + Y + Z);
- double z = 1 - X - Y;
- double[] cie = { x, y, z };
- return cie;
- }
- public float[] RgbToCMYK(int r, int g, int b)
- {
- float Rx = (float)r / 255;
- float Gx = (float)g / 255;
- float Bx = (float)b / 255;
- float k = 1 - max(Rx, Gx, Bx);
- float c = (1 - Rx - k) / (1 - k);
- float m = (1 - Gx - k) / (1 - k);
- float y = (1 - Bx - k) / (1 - k);
- float[] cmyk = { c, m, y, k };
- return cmyk;
- }
- public float[] RgbToHSV(int r, int g, int b)
- {
- float Rx = (float)r / 255;
- float Gx = (float)g / 255;
- float Bx = (float)b / 255;
- float Cmax = max(Rx, Gx, Bx);
- float Cmin = min(Rx, Gx, Bx);
- float d = Cmax - Cmin;
- float h = 0, s = 0;
- if (Cmax == Rx) h = 60 * ((Gx - Bx) / d);
- if (Cmax == Gx) h = 60 * ((Bx - Rx) / d + 2);
- if (Cmax == Bx) h = 60 * ((Rx - Gx) / d + 4);
- if (d == 0) s = 0;
- else s = d / Cmax;
- float v = Cmax;
- float[] hsv = { h, s, v };
- return hsv;
- }
- public float[] RgbToHSL(int r, int g, int b)
- {
- float Rx = (float)r / 255;
- float Gx = (float)g / 255;
- float Bx = (float)b / 255;
- float Cmax = max(Rx, Gx, Bx);
- float Cmin = min(Rx, Gx, Bx);
- float d = Cmax - Cmin;
- float h = 0, s = 0;
- if (Cmax == Rx) h = 60 * ((Gx - Bx) / d);
- if (Cmax == Gx) h = 60 * ((Bx - Rx) / d + 2);
- if (Cmax == Bx) h = 60 * ((Rx - Gx) / d + 4);
- if (d == 0) s = 0;
- else s = d / Cmax;
- float l = (Cmax + Cmin) / 2;
- float[] hsl = { h, s, l };
- return hsl;
- }
- public float max(float Rx, float Gx, float Bx)
- {
- float[] war = { Rx, Gx, Bx };
- float max = war[0];
- for (int i = 1; i < war.Length; i++)
- {
- if (max < war[i])
- max = war[i];
- }
- return max;
- }
- public float min(float Rx, float Gx, float Bx)
- {
- float[] war = { Rx, Gx, Bx };
- float min = war[0];
- for (int i = 1; i < war.Length; i++)
- {
- if (min > war[i])
- min = war[i];
- }
- return min;
- }
- private void btnCIE_Click(object sender, EventArgs e)
- {
- int r = Convert.ToInt16(rgbR.Text);
- int g = Convert.ToInt16(rgbG.Text);
- int b = Convert.ToInt16(rgbB.Text);
- double[] hsl = RgbToCIE(r, g, b);
- cieX.Text = hsl[0].ToString();
- cieY.Text = hsl[1].ToString();
- cieZ.Text = hsl[2].ToString();
- }
- private void btnCMYK_Click(object sender, EventArgs e)
- {
- int r = Convert.ToInt16(rgbR.Text);
- int g = Convert.ToInt16(rgbG.Text);
- int b = Convert.ToInt16(rgbB.Text);
- float[] hsl = RgbToCMYK(r, g, b);
- cmykC.Text = hsl[0].ToString();
- cmykM.Text = hsl[1].ToString();
- cmykY.Text = hsl[2].ToString();
- cmykK.Text = hsl[3].ToString();
- }
- private void btnHSV_Click(object sender, EventArgs e)
- {
- int r = Convert.ToInt16(rgbR.Text);
- int g = Convert.ToInt16(rgbG.Text);
- int b = Convert.ToInt16(rgbB.Text);
- float[] hsl = RgbToHSV(r, g, b);
- hsvH.Text = hsl[0].ToString();
- hsvS.Text = hsl[1].ToString();
- hsvV.Text = hsl[2].ToString();
- }
- private void btnHSL_Click(object sender, EventArgs e)
- {
- int r = Convert.ToInt16(rgbR.Text);
- int g = Convert.ToInt16(rgbG.Text);
- int b = Convert.ToInt16(rgbB.Text);
- float[] hsl = RgbToHSL(r, g, b);
- hslH.Text = hsl[0].ToString();
- hslS.Text = hsl[1].ToString();
- hslL.Text = hsl[2].ToString();
- }
- private void btnLoad_Click(object sender, EventArgs e)
- {
- DialogResult d = openFileDialog1.ShowDialog();
- if (d == DialogResult.OK)
- {
- objBitmap1 = new Bitmap(openFileDialog1.FileName);
- pictureBox1.Image = objBitmap1;
- }
- }
- private void btnRGBHist_Click(object sender, EventArgs e)
- {
- rgbRHist();
- rgbGHist();
- rgbBHist();
- RGBHist();
- }
- public void rgbRHist()
- {
- float[] h = new float[256];
- int i;
- for (i = 0; i < 256; i++) h[i]=0;
- for (int x = 0; x < objBitmap1.Width; x++)
- for (int y = 0; y < objBitmap1.Height; y++)
- {
- Color w = objBitmap1.GetPixel(x, y);
- int xg = w.R ;
- h[xg] = h[xg] + 1;
- }
- for(i=0; i<256;i++)
- {
- histogramR.Series["Red"].Points.AddXY(i, h[i]);
- }
- }
- public void rgbGHist()
- {
- float[] h = new float[256];
- int i;
- for (i = 0; i < 256; i++) h[i] = 0;
- for (int x = 0; x < objBitmap1.Width; x++)
- for (int y = 0; y < objBitmap1.Height; y++)
- {
- Color w = objBitmap1.GetPixel(x, y);
- int xg = w.G;
- h[xg] = h[xg] + 1;
- }
- for (i = 0; i < 256; i++)
- {
- histogramG.Series["Green"].Points.AddXY(i, h[i]);
- }
- }
- public void rgbBHist()
- {
- float[] h = new float[256];
- int i;
- for (i = 0; i < 256; i++) h[i] = 0;
- for (int x = 0; x < objBitmap1.Width; x++)
- for (int y = 0; y < objBitmap1.Height; y++)
- {
- Color w = objBitmap1.GetPixel(x, y);
- int xg = w.B;
- h[xg] = h[xg] + 1;
- }
- for (i = 0; i < 256; i++)
- {
- histogramB.Series["Blue"].Points.AddXY(i, h[i]);
- }
- }
- public void RGBHist()
- {
- float[] h = new float[768];
- int i;
- for (i = 0; i < 768; i++) h[i] = 0;
- for (int x = 0; x < objBitmap1.Width; x++)
- for (int y = 0; y < objBitmap1.Height; y++)
- {
- Color w = objBitmap1.GetPixel(x, y);
- int xg = w.R;
- h[xg] = h[xg] + 1;
- xg = w.G + 256;
- h[xg] = h[xg] + 1;
- xg = w.B + 512;
- h[xg] = h[xg] + 1;
- }
- for (i = 0; i < 256; i++)
- {
- histogramRGB.Series["Red"].Points.AddXY(i, h[i]);
- histogramRGB.Series["Green"].Points.AddXY(256+i, h[256+i]);
- histogramRGB.Series["Blue"].Points.AddXY(512+i, h[512+i]);
- }
- }
- private void btnCMYKHist_Click(object sender, EventArgs e)
- {
- cmykHist();
- }
- public void cmykHist()
- {
- float[] hC = new float[101];
- float[] hM = new float[101];
- float[] hY = new float[101];
- float[] hK = new float[101];
- for(int i = 0; i < 101; i++) hC[i] = 0;
- for (int x = 0; x < objBitmap1.Width; x++)
- for (int y = 0; y < objBitmap1.Height; y++)
- {
- Color w = objBitmap1.GetPixel(x, y);
- int r = w.R;
- int g = w.G;
- int b = w.B;
- float[] hsl = RgbToCMYK(r, g, b);
- int xC = (int)(hsl[0] * 100);
- int xM = (int)(hsl[1] * 100);
- int xY = (int)(hsl[2] * 100);
- int xK = (int)(hsl[3] * 100);
- if (xC >= 0)
- hC[xC] = hC[xC] + 1;
- if (xM >= 0)
- hM[xM] = hM[xM] + 1;
- if (xY >= 0)
- hY[xY] = hY[xY] + 1;
- if (xK >= 0)
- hK[xK] = hK[xK] + 1;
- }
- double k = 0;
- for (int i = 0; i < 101; i++)
- {
- histogramC.Series["Cyan"].Points.AddXY(k, hC[i]);
- histogramM.Series["Magenta"].Points.AddXY(k, hM[i]);
- histogramY.Series["Yellow"].Points.AddXY(k, hY[i]);
- histogramK.Series["Black"].Points.AddXY(k, hK[i]);
- histogramCMYK.Series["Cyan"].Points.AddXY(k, hC[i]);
- histogramCMYK.Series["Magenta"].Points.AddXY(1.01 + k, hM[i]);
- histogramCMYK.Series["Yellow"].Points.AddXY(2.02 + k, hY[i]);
- histogramCMYK.Series["Black"].Points.AddXY(3.03 + k, hK[i]);
- k += 0.01;
- }
- }
- private void btncolorprev_Click(object sender, EventArgs e)
- {
- Bitmap objBitmap2 = new Bitmap(256, 256);
- int r = Convert.ToInt16(rgbR.Text);
- int g = Convert.ToInt16(rgbG.Text);
- int b = Convert.ToInt16(rgbB.Text);
- for (int x = 0; x < 256; x++)
- {
- int rr = r + x;
- int gg = g + x;
- int bb = b + x;
- for (int y = 0; y < 256; y++)
- {
- Color new_w = Color.FromArgb(r, g, b);
- objBitmap2.SetPixel(x, y, new_w);
- }
- }
- ColorPreview.Image = objBitmap2;
- }
- private void btnHueHist_Click(object sender, EventArgs e)
- {
- float[] h = new float[361];
- int i;
- for (i = 0; i < 361; i++) h[i] = 0;
- for (int x = 0; x < objBitmap1.Width; x++)
- for (int y = 0; y < objBitmap1.Height; y++)
- {
- Color w = objBitmap1.GetPixel(x, y);
- int r = w.R;
- int g = w.G;
- int b = w.B;
- float[] hsl = RgbToHSV(r, g, b);
- int xg = (int)hsl[0];
- if (xg >= 0)
- h[xg] = h[xg] + 1;
- }
- for (i = 0; i < 361; i++)
- {
- HistogramHue.Series["Hue"].Points.AddXY(i, h[i]);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment