c# Fotoğrafın Açılması

private void button1_Click(object sender, EventArgs e) //fotoğrafın açılması
{
OpenFileDialog op = new OpenFileDialog();
op.DefaultExt = “.jpg”;
op.Filter = “Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.*”;
op.ShowDialog();
String ResminYolu = op.FileName;
pictureBox1.Image = Image.FromFile(ResminYolu);}
2-Görüntünün renkli, gri ve renk kanallarına ayrılmış histogramlarını ekranda gösteriniz.

a)2.pencerede açılan resim ve renk kanalları
private void button2_Click(object sender, EventArgs e)
{
Color OkunanRenk, DonusenRenk;
int R = 0, G = 0, B = 0;
Bitmap GirisResmi, CikisResmi;
GirisResmi = new Bitmap(pictureBox1.Image);
int ResimGenisligi = GirisResmi.Width; //GirisResmi global tanımlandı.
int ResimYuksekligi = GirisResmi.Height;
CikisResmi = new Bitmap(ResimGenisligi, ResimYuksekligi); //Cikis resmini oluşturuyor.
int i = 0, j = 0; //Çıkış resminin x ve y si olacak.
for (int x = 0; x < ResimGenisligi; x++)
{
for (int y = 0; y < ResimYuksekligi; y++)
{
OkunanRenk = GirisResmi.GetPixel(x, y); // renk kanalları
R = OkunanRenk.R;
G = OkunanRenk.G;
B = OkunanRenk.B;
DonusenRenk = Color.FromArgb(R, G, B);
CikisResmi.SetPixel(x, y, DonusenRenk);
}
}
pictureBox2.Image = CikisResmi;
}
b)2. Pencerede gri tonlamalı resmin açılması ve renklerin okunması
pictureBox1.Width = 200; pictureBox1.Height = 200;
pictureBox1.Location = new Point(1,1);
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
pictureBox2.Width = 200; pictureBox2.Height = 200;
pictureBox2.Location = new Point(200, 1);
pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;
this.Controls.Add(pictureBox1);
this.Controls.Add(pictureBox2);
Bitmap bitmap1 = new Bitmap(pictureBox1.Image);
int width1 = bitmap1.Width;
int height1 = bitmap1.Height;
Bitmap bitmap2 = new Bitmap(width1, height1);
for (int i = 0; i < width1; i++)
{
for (int j = 0; j < height1; j++)
{
Color color1 = bitmap1.GetPixel(i, j);
byte R = color1.R;
byte G = color1.G;
byte B = color1.B;
int common = (R + G + B) / 3;
color1 = Color.FromArgb(common, common, common);
bitmap2.SetPixel(i, j, color1);
}
}
pictureBox2.Image = bitmap2;
}
c)Histogram grafiği ve renk kodlarının elde edilmesi

private void button3_Click(object sender, EventArgs e)
{
ArrayList DiziPiksel = new ArrayList();
int OrtalamaRenk = 0;
Color OkunanRenk ;
int R = 0, G = 0, B = 0;
Bitmap GirisResmi; //Histogram için giriş resmi gri-ton olmalıdır.
GirisResmi = new Bitmap(pictureBox1.Image);
int ResimGenisligi = GirisResmi.Width; //GirisResmi global tanımlandı.
int ResimYuksekligi = GirisResmi.Height;
int i = 0; //piksel sayısı tutulacak.
for (int x = 0; x < GirisResmi.Width; x++)
{
for (int y = 0; y < GirisResmi.Height; y++)
{
OkunanRenk = GirisResmi.GetPixel(x, y);
OrtalamaRenk = (int)(OkunanRenk.R + OkunanRenk.G + OkunanRenk.B) / 3; //Griton resimde üç kanal
DiziPiksel.Add(OrtalamaRenk); //Resimdeki tüm noktaları diziye atıyor.
}
}
int [] DiziPikselSayilari = new int[256];
for (int r = 0; r < 255; r++) //256 tane renk tonu için dönecek.
{
int PikselSayisi=0;
for (int s = 0; s < DiziPiksel.Count ; s++) //resimdeki piksel sayısınca dönecek.
{
if (r == Convert.ToInt16(DiziPiksel[s]))
PikselSayisi++;
}
DiziPikselSayilari[r] = PikselSayisi;
}
//Değerleri listbox’a ekliyor.
int RenkMaksPikselSayisi = 0; //Grafikte y eksenini ölçeklerken kullanılacak.
for (int k = 0; k <= 255; k++)
{listBox1.Items.Add(“Renk:” + k + “=” + DiziPikselSayilari[k]);
if(DiziPikselSayilari[k]>RenkMaksPikselSayisi)
{
RenkMaksPikselSayisi=DiziPikselSayilari[k];
}
}
//Grafiği çiziyor.
Graphics CizimAlani;
Pen Kalem1 = new Pen(System.Drawing.Color.Yellow, 1);
Pen Kalem2 = new Pen(System.Drawing.Color.Red, 1);
CizimAlani = pictureBox2.CreateGraphics();
pictureBox2.Refresh();
int GrafikYuksekligi = 400;
double OlcekY = RenkMaksPikselSayisi / GrafikYuksekligi, OlcekX = 1.6;
for (int x = 0; x <= 255; x++)
{
CizimAlani.DrawLine(Kalem1, (int)(20 + x * OlcekX), GrafikYuksekligi, (int)(20 + x * OlcekX),
(GrafikYuksekligi – (int)(DiziPikselSayilari[x] / OlcekY)));
if(x%50==0)
CizimAlani.DrawLine(Kalem2, (int)(20 + x * OlcekX), GrafikYuksekligi, (int)(20 + x * OlcekX), 0);
}
textBox1.Text = “Maks.Piks=” + RenkMaksPikselSayisi.ToString();
}
3-Görüntüyü Ters Çeviren Kod

private void button4_Click(object sender, EventArgs e)
{
Image img = pictureBox1.Image;
img.RotateFlip(RotateFlipType.Rotate180FlipNone);
pictureBox2.Image = img;
}

private void button5_Click(object sender, EventArgs e)
{
Color OkunanRenk;
Bitmap GirisResmi, CikisResmi;
GirisResmi = new Bitmap(pictureBox1.Image);
int ResimGenisligi = GirisResmi.Width;
int ResimYuksekligi = GirisResmi.Height;
CikisResmi = new Bitmap(ResimGenisligi, ResimYuksekligi);
double Aci = 90
double RadyanAci = Aci * 2 * Math.PI / 360;
double x2 = 0, y2 = 0;
//Resim merkezini buluyor. Resim merkezi etrafında döndürecek.
int x0 = ResimGenisligi / 2;
int y0 = ResimYuksekligi / 2;
for (int x1 = 0; x1 < (ResimGenisligi); x1++)
{
for (int y1 = 0; y1 < (ResimYuksekligi); y1++)
{
OkunanRenk = GirisResmi.GetPixel(x1, y1);
//—-A-Orta dikey eksen etrafında aynalama —————-
//x2 = Convert.ToInt16(-x1 + 2 * x0);
//y2 = Convert.ToInt16(y1);
//—-B-Orta yatay eksen etrafında aynalama —————-
//x2 = Convert.ToInt16(x1);
//y2 = Convert.ToInt16(-y1 + 2 *y0);
//—-C-Ortadan geçen 45 açılı çizgi etrafında aynalama———-
double Delta = (x1 – x0) * Math.Sin(RadyanAci) – (y1 – y0) * Math.Cos(RadyanAci);
x2 = Convert.ToInt16(x1 + 2 * Delta * (-Math.Sin(RadyanAci)));
y2 = Convert.ToInt16(y1 + 2 * Delta * (Math.Cos(RadyanAci)));
if (x2 > 0 && x2 < ResimGenisligi && y2 > 0 && y2 < ResimYuksekligi)
CikisResmi.SetPixel((int)x2, (int)y2, OkunanRenk);
}
} pictureBox2.Image = CikisResmi;
}