ariestamirra

prak12

Jun 28th, 2015
247
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 11.56 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9.  
  10. namespace Praktikum12
  11. {
  12.     public partial class Form1 : Form
  13.     {
  14.         Bitmap objBitmap1;
  15.         public Form1()
  16.         {
  17.             InitializeComponent();
  18.         }
  19.        
  20.         public double[] RgbToCIE(int r, int g, int b)
  21.         {
  22.             float Rx = r; float Gx = g; float Bx = b;
  23.             double X = 0.723 * Rx + 0.273 * Gx + 0.166 * Bx;
  24.             double Y = 0.265 * Rx + 0.717 * Gx + 0.008 * Bx;
  25.             double Z = 0.000 * Rx + 0.008 * Gx + 0.824 * Bx;
  26.  
  27.             double x = X / (X + Y + Z);
  28.             double y = Y / (X + Y + Z);
  29.             double z = 1 - X - Y;
  30.  
  31.             double[] cie = { x, y, z };
  32.             return cie;
  33.         }
  34.         public float[] RgbToCMYK(int r, int g, int b)
  35.         {
  36.             float Rx = (float)r / 255;
  37.             float Gx = (float)g / 255;
  38.             float Bx = (float)b / 255;
  39.             float k = 1 - max(Rx, Gx, Bx);
  40.             float c = (1 - Rx - k) / (1 - k);
  41.             float m = (1 - Gx - k) / (1 - k);
  42.             float y = (1 - Bx - k) / (1 - k);
  43.             float[] cmyk = { c, m, y, k };
  44.             return cmyk;
  45.         }
  46.         public float[] RgbToHSV(int r, int g, int b)
  47.         {
  48.             float Rx = (float)r / 255;
  49.             float Gx = (float)g / 255;
  50.             float Bx = (float)b / 255;
  51.             float Cmax = max(Rx, Gx, Bx);
  52.             float Cmin = min(Rx, Gx, Bx);
  53.             float d = Cmax - Cmin;
  54.  
  55.             float h = 0, s = 0;
  56.             if (Cmax == Rx) h = 60 * ((Gx - Bx) / d);
  57.             if (Cmax == Gx) h = 60 * ((Bx - Rx) / d + 2);
  58.             if (Cmax == Bx) h = 60 * ((Rx - Gx) / d + 4);
  59.             if (d == 0) s = 0;
  60.             else s = d / Cmax;
  61.             float v = Cmax;
  62.  
  63.             float[] hsv = { h, s, v };
  64.             return hsv;
  65.         }
  66.         public float[] RgbToHSL(int r, int g, int b)
  67.         {
  68.             float Rx = (float)r / 255;
  69.             float Gx = (float)g / 255;
  70.             float Bx = (float)b / 255;
  71.             float Cmax = max(Rx, Gx, Bx);
  72.             float Cmin = min(Rx, Gx, Bx);
  73.             float d = Cmax - Cmin;
  74.  
  75.             float h = 0, s = 0;
  76.             if (Cmax == Rx) h = 60 * ((Gx - Bx) / d);
  77.             if (Cmax == Gx) h = 60 * ((Bx - Rx) / d + 2);
  78.             if (Cmax == Bx) h = 60 * ((Rx - Gx) / d + 4);
  79.             if (d == 0) s = 0;
  80.             else s = d / Cmax;
  81.             float l = (Cmax + Cmin) / 2;
  82.  
  83.             float[] hsl = { h, s, l };
  84.             return hsl;
  85.         }
  86.         public float max(float Rx, float Gx, float Bx)
  87.         {
  88.  
  89.             float[] war = { Rx, Gx, Bx };
  90.             float max = war[0];
  91.             for (int i = 1; i < war.Length; i++)
  92.             {
  93.                 if (max < war[i])
  94.                     max = war[i];
  95.             }
  96.             return max;
  97.         }
  98.         public float min(float Rx, float Gx, float Bx)
  99.         {
  100.  
  101.             float[] war = { Rx, Gx, Bx };
  102.             float min = war[0];
  103.             for (int i = 1; i < war.Length; i++)
  104.             {
  105.                 if (min > war[i])
  106.                     min = war[i];
  107.             }
  108.             return min;
  109.         }
  110.  
  111.         private void btnCIE_Click(object sender, EventArgs e)
  112.         {
  113.             int r = Convert.ToInt16(rgbR.Text);
  114.             int g = Convert.ToInt16(rgbG.Text);
  115.             int b = Convert.ToInt16(rgbB.Text);
  116.             double[] hsl = RgbToCIE(r, g, b);
  117.             cieX.Text = hsl[0].ToString();
  118.             cieY.Text = hsl[1].ToString();
  119.             cieZ.Text = hsl[2].ToString();
  120.         }
  121.  
  122.         private void btnCMYK_Click(object sender, EventArgs e)
  123.         {
  124.             int r = Convert.ToInt16(rgbR.Text);
  125.             int g = Convert.ToInt16(rgbG.Text);
  126.             int b = Convert.ToInt16(rgbB.Text);
  127.             float[] hsl = RgbToCMYK(r, g, b);
  128.             cmykC.Text = hsl[0].ToString();
  129.             cmykM.Text = hsl[1].ToString();
  130.             cmykY.Text = hsl[2].ToString();
  131.             cmykK.Text = hsl[3].ToString();
  132.  
  133.         }
  134.  
  135.         private void btnHSV_Click(object sender, EventArgs e)
  136.         {
  137.             int r = Convert.ToInt16(rgbR.Text);
  138.             int g = Convert.ToInt16(rgbG.Text);
  139.             int b = Convert.ToInt16(rgbB.Text);
  140.             float[] hsl = RgbToHSV(r, g, b);
  141.             hsvH.Text = hsl[0].ToString();
  142.             hsvS.Text = hsl[1].ToString();
  143.             hsvV.Text = hsl[2].ToString();
  144.         }
  145.  
  146.         private void btnHSL_Click(object sender, EventArgs e)
  147.         {
  148.             int r = Convert.ToInt16(rgbR.Text);
  149.             int g = Convert.ToInt16(rgbG.Text);
  150.             int b = Convert.ToInt16(rgbB.Text);
  151.             float[] hsl = RgbToHSL(r, g, b);
  152.             hslH.Text = hsl[0].ToString();
  153.             hslS.Text = hsl[1].ToString();
  154.             hslL.Text = hsl[2].ToString();
  155.         }
  156.  
  157.         private void btnLoad_Click(object sender, EventArgs e)
  158.         {
  159.             DialogResult d = openFileDialog1.ShowDialog();
  160.             if (d == DialogResult.OK)
  161.             {
  162.                 objBitmap1 = new Bitmap(openFileDialog1.FileName);
  163.                 pictureBox1.Image = objBitmap1;
  164.             }
  165.         }
  166.  
  167.         private void btnRGBHist_Click(object sender, EventArgs e)
  168.         {
  169.             rgbRHist();
  170.             rgbGHist();
  171.             rgbBHist();
  172.             RGBHist();
  173.         }
  174.         public void rgbRHist()
  175.         {
  176.             float[] h = new float[256];
  177.             int i;
  178.             for (i = 0; i < 256; i++) h[i]=0;
  179.             for (int x = 0; x < objBitmap1.Width; x++)
  180.                 for (int y = 0; y < objBitmap1.Height; y++)
  181.                 {
  182.                     Color w = objBitmap1.GetPixel(x, y);
  183.                     int xg = w.R ;
  184.                     h[xg] = h[xg] + 1;
  185.                 }
  186.             for(i=0; i<256;i++)
  187.             {
  188.                 histogramR.Series["Red"].Points.AddXY(i, h[i]);
  189.             }
  190.  
  191.         }
  192.         public void rgbGHist()
  193.         {
  194.             float[] h = new float[256];
  195.             int i;
  196.             for (i = 0; i < 256; i++) h[i] = 0;
  197.             for (int x = 0; x < objBitmap1.Width; x++)
  198.                 for (int y = 0; y < objBitmap1.Height; y++)
  199.                 {
  200.                     Color w = objBitmap1.GetPixel(x, y);
  201.                     int xg = w.G;
  202.                     h[xg] = h[xg] + 1;
  203.                 }
  204.             for (i = 0; i < 256; i++)
  205.             {
  206.                 histogramG.Series["Green"].Points.AddXY(i, h[i]);
  207.             }
  208.  
  209.         }
  210.         public void rgbBHist()
  211.         {
  212.             float[] h = new float[256];
  213.             int i;
  214.             for (i = 0; i < 256; i++) h[i] = 0;
  215.             for (int x = 0; x < objBitmap1.Width; x++)
  216.                 for (int y = 0; y < objBitmap1.Height; y++)
  217.                 {
  218.                     Color w = objBitmap1.GetPixel(x, y);
  219.                     int xg = w.B;
  220.                     h[xg] = h[xg] + 1;
  221.                 }
  222.             for (i = 0; i < 256; i++)
  223.             {
  224.                 histogramB.Series["Blue"].Points.AddXY(i, h[i]);
  225.             }
  226.  
  227.         }
  228.         public void RGBHist()
  229.         {
  230.             float[] h = new float[768];
  231.             int i;
  232.             for (i = 0; i < 768; i++) h[i] = 0;
  233.             for (int x = 0; x < objBitmap1.Width; x++)
  234.                 for (int y = 0; y < objBitmap1.Height; y++)
  235.                 {
  236.                     Color w = objBitmap1.GetPixel(x, y);
  237.                     int xg = w.R;
  238.                     h[xg] = h[xg] + 1;
  239.                     xg = w.G + 256;
  240.                     h[xg] = h[xg] + 1;
  241.                     xg = w.B + 512;
  242.                     h[xg] = h[xg] + 1;
  243.                 }
  244.             for (i = 0; i < 256; i++)
  245.             {
  246.                 histogramRGB.Series["Red"].Points.AddXY(i, h[i]);
  247.                 histogramRGB.Series["Green"].Points.AddXY(256+i, h[256+i]);
  248.                 histogramRGB.Series["Blue"].Points.AddXY(512+i, h[512+i]);
  249.             }
  250.         }
  251.  
  252.         private void btnCMYKHist_Click(object sender, EventArgs e)
  253.         {
  254.             cmykHist();
  255.            
  256.         }
  257.         public void cmykHist()
  258.         {
  259.             float[] hC = new float[101];
  260.             float[] hM = new float[101];
  261.             float[] hY = new float[101];
  262.             float[] hK = new float[101];
  263.             for(int i = 0; i < 101; i++) hC[i] = 0;
  264.             for (int x = 0; x < objBitmap1.Width; x++)
  265.                 for (int y = 0; y < objBitmap1.Height; y++)
  266.                 {
  267.                     Color w = objBitmap1.GetPixel(x, y);
  268.                     int r = w.R;
  269.                     int g = w.G;
  270.                     int b = w.B;
  271.                     float[] hsl = RgbToCMYK(r, g, b);
  272.                     int xC = (int)(hsl[0] * 100);
  273.                     int xM = (int)(hsl[1] * 100);
  274.                     int xY = (int)(hsl[2] * 100);
  275.                     int xK = (int)(hsl[3] * 100);
  276.                     if (xC >= 0)
  277.                         hC[xC] = hC[xC] + 1;
  278.                     if (xM >= 0)
  279.                         hM[xM] = hM[xM] + 1;
  280.                     if (xY >= 0)
  281.                         hY[xY] = hY[xY] + 1;
  282.                     if (xK >= 0)
  283.                         hK[xK] = hK[xK] + 1;
  284.                 }
  285.             double k = 0;
  286.             for (int i = 0; i < 101; i++)
  287.             {
  288.                
  289.                 histogramC.Series["Cyan"].Points.AddXY(k, hC[i]);
  290.                 histogramM.Series["Magenta"].Points.AddXY(k, hM[i]);
  291.                 histogramY.Series["Yellow"].Points.AddXY(k, hY[i]);
  292.                 histogramK.Series["Black"].Points.AddXY(k, hK[i]);
  293.                 histogramCMYK.Series["Cyan"].Points.AddXY(k, hC[i]);
  294.                 histogramCMYK.Series["Magenta"].Points.AddXY(1.01 + k, hM[i]);
  295.                 histogramCMYK.Series["Yellow"].Points.AddXY(2.02 + k, hY[i]);
  296.                 histogramCMYK.Series["Black"].Points.AddXY(3.03 + k, hK[i]);
  297.                 k += 0.01;
  298.             }
  299.         }
  300.  
  301.         private void btncolorprev_Click(object sender, EventArgs e)
  302.         {
  303.             Bitmap objBitmap2 = new Bitmap(256, 256);
  304.             int r = Convert.ToInt16(rgbR.Text);
  305.             int g = Convert.ToInt16(rgbG.Text);
  306.             int b = Convert.ToInt16(rgbB.Text);
  307.            
  308.             for (int x = 0; x < 256; x++)
  309.             {
  310.                 int rr = r + x;
  311.                 int gg = g + x;
  312.                 int bb = b + x;
  313.                 for (int y = 0; y < 256; y++)
  314.                 {
  315.                     Color new_w = Color.FromArgb(r, g, b);
  316.                     objBitmap2.SetPixel(x, y, new_w);
  317.                 }
  318.             }
  319.             ColorPreview.Image = objBitmap2;
  320.  
  321.         }
  322.  
  323.         private void btnHueHist_Click(object sender, EventArgs e)
  324.         {
  325.             float[] h = new float[361];
  326.             int i;
  327.             for (i = 0; i < 361; i++) h[i] = 0;
  328.             for (int x = 0; x < objBitmap1.Width; x++)
  329.                 for (int y = 0; y < objBitmap1.Height; y++)
  330.                 {
  331.                     Color w = objBitmap1.GetPixel(x, y);
  332.                     int r = w.R;
  333.                     int g = w.G;
  334.                     int b = w.B;
  335.                     float[] hsl = RgbToHSV(r, g, b);
  336.                     int xg = (int)hsl[0];
  337.                     if (xg >= 0)
  338.                     h[xg] = h[xg] + 1;
  339.                 }
  340.             for (i = 0; i < 361; i++)
  341.             {
  342.                 HistogramHue.Series["Hue"].Points.AddXY(i, h[i]);
  343.             }
  344.         }
  345.     }
  346. }
Advertisement
Add Comment
Please, Sign In to add comment