﻿
using System;
using System.Drawing;
namespace slike
{
    class Program
    {
        public static void Main(string[] args)
        {
            //slika tipa Bitmap
            Bitmap slika;
            slika = new Bitmap(@"E:\panda.jpg", true);

            //path ne sme vsebovati šumnikov, saj vrne error


            //če bomo path uporabljali veliko, se bolj splača
            String path = @"E:\";
            slika = new Bitmap(path + "panda.jpg", true);



            //izpis velikosti slike
            //uporabna informacija za naprej
            Console.WriteLine(slika.Size);



            //kopija slike s pomočjo Clone()
            Bitmap kopija = (Bitmap)slika.Clone();


            //shranjevanje slike s pomočjo Save(path)
            //PAZI NA KONČNICO .jpg, .png ...
            kopija.Save(path + "kopija.jpg");


            //Spreminjanje velikosti
            //klic Bitmap(Image original, int width, int height)

            Bitmap slika_nova_velikost = new Bitmap(slika, 500, 500);
            slika_nova_velikost.Save(path + "slika_nova_velikost.jpg");



            //Obrezovanje slike
            //Rectangle(int x, int y, int sirina, int visina)
            //x in y označujeta levi zgornji kot
            //sirina in visina pa velikost

            Rectangle rec = new Rectangle(0, 0, 500, 500);
            Bitmap obrezana_slika = slika.Clone(rec, slika.PixelFormat);
            obrezana_slika.Save(path + "obrezana_slika.jpg");



            //drug način obrezovanja
            //vemo le, koliko hočemo obrezati na levi, desni, zgoraj in spodaj
            //za pravokotnik moramo podati levi zgornji kot, sirino in visino
            //levi zgornji kot bo podan s podatkoma koliko obrežemo levo in zgoraj
            //nova širina bo enaka: originalna širina - (levo + desno)
            //nova višina bo enaka: originalna višina - (zgoraj + spodaj)

            int levo = 220;
            int desno = 200;
            int zgoraj = 300;
            int spodaj = 600;
            Rectangle pravokotnik = new Rectangle(levo, zgoraj, slika.Width - levo - desno, slika.Height - zgoraj - spodaj);
            Bitmap obrezana_slika2 = slika.Clone(pravokotnik, slika.PixelFormat);
            obrezana_slika2.Save(path + "obrezana_slika2.jpg");



            //error "out of memory", če hočemo obrezati sliko, kjer je ni
            //Rectangle pravokotnik2 = new Rectangle(slika.Width, slika.Height, 100, 100);
            //Bitmap obrezana_slika4 = slika.Clone(pravokotnik2, slika.PixelFormat);



            //rotacija slike s pomočjo RotateFlip
            //rotiramo in zrcalimo Rotate + St + Flip + XY
            //St so stopinje rotacije v smeri urinega kazalca(če nočemo rotacije, podamo None in ne 0)
            //XY pa je ena od {None, X, Y, XY}, ki označuje preko katere osi hočemo zrcaliti

            Bitmap obrnjena_slika = (Bitmap)slika.Clone();
            obrnjena_slika.RotateFlip(RotateFlipType.Rotate90FlipX);
            obrnjena_slika.Save(path + "obrnjena_slika.jpg");




            //Barvanje slike
            //barvo dobimo z ukazom Color.FromArgb(rdeča, zelena, modra)
            //rdeča, zelena, modra imajo vrednosti 0 - 255
            //(255, 255, 255) je bela
            //(0,0,0) je črna
            //nastavimo barvo pixla s pomočjo SetPixel(x, y, barva), kjer x in y označujeta položaj pixla

            Bitmap prebarvan_pixel = (Bitmap)slika.Clone();
            Color nova_barva = Color.FromArgb(255, 255, 255); //bela
            prebarvan_pixel.SetPixel(slika.Width / 2, 3 * slika.Height / 4, nova_barva);
            prebarvan_pixel.Save(path + "prebarvan_pixel.jpg");



            //"branje" barve z GetPixel(x, y)
            //barva.R, barva.G in barva.B so vrednosti rdeče, zelene in modre v pixlu
            //nastavimo vrednost zelene v vsakem pixlu na 0
            Bitmap prebarvana_slika = (Bitmap)slika.Clone();
            for (int x = 0; x < prebarvana_slika.Width; x++)
            {
                for (int y = 0; y < prebarvana_slika.Height; y++)
                {
                    Color barva_pixla = prebarvana_slika.GetPixel(x, y);
                    Color nova_barva_pixla = Color.FromArgb(barva_pixla.R, 0, barva_pixla.B);
                    prebarvana_slika.SetPixel(x, y, nova_barva_pixla);
                }
            }
            prebarvana_slika.Save(path + "prebarvana_slika.jpg");




            //postavimo en pixel na barvo drugega
            Color barva1 = slika.GetPixel(100, 300);
            prebarvan_pixel.SetPixel(430, 300, barva1);
            prebarvan_pixel.Save(path + "prebarvan_pixel.jpg");





            Bitmap eiffel = new Bitmap(path + "eiffel.jpg");
            Rectangle nov_prav = new Rectangle(eiffel.Width / 4, 0, eiffel.Width / 2, eiffel.Height);
            eiffel = eiffel.Clone(nov_prav, eiffel.PixelFormat);
            for (int x = 0; x < eiffel.Width; x++)
            {
                for (int y = 0; y < eiffel.Height; y++)
                {
                    if (y <= eiffel.Height / 6)
                    {
                        Color clr = eiffel.GetPixel(x, y);
                        Color newclr = Color.FromArgb(clr.R, 0, 0);
                        eiffel.SetPixel(x, y, newclr);
                    }
                    else if (y > eiffel.Height / 6 && y <= 2 * eiffel.Height / 6)
                    {
                        Color clr = eiffel.GetPixel(x, y);
                        Color newclr = Color.FromArgb(clr.R, clr.G * 140 / 255, 0);
                        eiffel.SetPixel(x, y, newclr);
                    }
                    else if (y > 2 * eiffel.Height / 6 && y <= 3 * eiffel.Height / 6)
                    {
                        Color clr = eiffel.GetPixel(x, y);
                        Color newclr = Color.FromArgb(clr.R, clr.G * 215 / 255, 0);
                        eiffel.SetPixel(x, y, newclr);
                    }
                    else if (y > 3 * eiffel.Height / 6 && y <= 4 * eiffel.Height / 6)
                    {
                        Color clr = eiffel.GetPixel(x, y);
                        Color newclr = Color.FromArgb(0, clr.G, 0);
                        eiffel.SetPixel(x, y, newclr);
                    }
                    else if (y > 4 * eiffel.Height / 6 && y <= 5 * eiffel.Height / 6)
                    {
                        Color clr = eiffel.GetPixel(x, y);
                        Color newclr = Color.FromArgb(clr.R * 100 / 255, clr.G * 100 / 255, clr.B);
                        eiffel.SetPixel(x, y, newclr);
                    }
                    else
                    {
                        Color clr = eiffel.GetPixel(x, y);
                        Color newclr = Color.FromArgb(clr.R, 0, clr.B);
                        eiffel.SetPixel(x, y, newclr);
                    }
                }
            }
            eiffel.RotateFlip(RotateFlipType.Rotate180FlipNone);
            eiffel.Save(path + "eiffel2.jpg");












            Bitmap naloga1(Bitmap slika2)
            {
                if (slika2.Width < 800 || slika2.Height < 800) {
                    Console.WriteLine("Slika je premajhna");
                    return null;
                }
                Bitmap kopija_slike = (Bitmap)slika2.Clone();
                kopija_slike.RotateFlip(RotateFlipType.Rotate270FlipY);
                Console.WriteLine(kopija_slike.Size);
                Rectangle pravokot = new Rectangle((kopija.Width - 800) / 2, (kopija.Height - 800) / 2, 800, 800);
                kopija_slike = kopija_slike.Clone(pravokotnik, kopija_slike.PixelFormat);
                return kopija_slike;
            }

            //Bitmap resitev1 = naloga1(slika);
            //resitev1.Save(path + "resitev1.jpg");

            Bitmap naloga2(Bitmap slikca)
            {
                Bitmap zrcalo = (Bitmap)slikca.Clone();
                for (int i = 0; i < zrcalo.Height; i++)
                {
                    for (int j = 0; j < zrcalo.Width / 2; j++)
                    {
                        Color barva = zrcalo.GetPixel(zrcalo.Width - j - 1, i);
                        zrcalo.SetPixel(j, i, barva);
                    }
                }
                return zrcalo;
            }

            //Bitmap resitev2 = naloga2(slika);
            //resitev2.Save(path + "resitev2.jpg");
        }
    }
}

