View difference between Paste ID: PRmwHFfX and U3FwThZN
SHOW: | | - or go back to the newest paste.
1
using System;
2
using System.Drawing;
3
using System.IO;
4
5
namespace PrzetwarzanieObrazu
6
{
7
    internal class Program
8
    {
9
        //Ścieżka do pliku obrazu wejściowego i wyjściowego
10
        //Plik powinien znajdować się tam gdzie .exe aplikacji
11
        public static string sciezkaObrazu = $@"image.jpg";
12
        public static string sciezkaZapisuNowegoObrazu = $@"newImage.jpg";
13
14
        public static void Main(string[] args)
15
        {
16
            //Pobranie obrazu z pliku
17
            Bitmap obraz = PobierzObraz(sciezkaObrazu);
18
19
            // Sprawdzenie czy obraz został poprawnie załadowany
20
            bool test = (obraz != null);
21
            string odpowiedzTestu = test ? "powodzeniem" : "niepowodzeniem";
22
23
            Console.WriteLine($"Pobieranie obrazu: {sciezkaObrazu}...\n " +
24
                $"... zakończono {odpowiedzTestu}\n");
25
26
            int wybor;
27
            while (true && test)
28
            {
29
                Console.WriteLine(
30
                        "Wybierz opcję:\n" +
31
                        "[1] Rozjaśnij obraz\n" +
32
                        "[2] Przyciemnij obraz\n" +
33
                        "[3] Zamien kolory\n" +
34
                        "[0] Wyjście");
35
36
                wybor = int.Parse(Console.ReadLine());
37
38
                Console.Clear();
39
                switch (wybor)
40
                {
41
                    case 1:
42
                        //RozjasnijObraz(obraz);
43
                        ZmienJasnoscObrazu(obraz, 50);
44
                        break;
45
                    case 2:
46
                        //PrzyciemnijObraz(obraz);
47
                        ZmienJasnoscObrazu(obraz, -50);
48
                        break;
49
                    case 3:
50
                        ZamienKolory(obraz);
51
                        break;
52
                    case 0:
53
                        Console.WriteLine("Wyjście z aplikacji");
54
                        return;
55
                    default:
56
                        Console.WriteLine("Nieprawidłowa operacja");
57
                        break;
58
                }
59
            }
60
61
            Console.ReadKey();
62
        }
63
64
        // Metoda do rozjaśniania obrazu
65
        public static void RozjasnijObraz(Bitmap img)
66
        {
67
            int silaRozjasniania = 50;
68
            // Iteracja przez każdy piksel obrazu
69
            for (int i = 0; i < img.Width; i++)
70
            {
71
                for (int j = 0; j < img.Height; j++)
72
                {
73
                    // Pobranie wartości piksela
74
                    Color piksel = img.GetPixel(i, j);
75
76
                    // Zmiana jasności piksela o 10 jednostek
77
                    Color nowyPiksel = Color.FromArgb(
78
                        ZetnijWartosc(piksel.R + silaRozjasniania),
79
                        ZetnijWartosc(piksel.G + silaRozjasniania),
80
                        ZetnijWartosc(piksel.B + silaRozjasniania));
81
82
                    // Ustawienie nowej wartości piksela
83
                    img.SetPixel(i, j, nowyPiksel);
84
                }
85
            }
86
87
            Console.WriteLine("...Rozjaśniono \n\n");
88
            // Zapisanie zmodyfikowanego obrazu
89
            img.Save(sciezkaZapisuNowegoObrazu);
90
        }
91
92
        public static void PrzyciemnijObraz(Bitmap img)
93
        {
94
            int silaPrzyciemniania = 50;
95
            for (int i = 0; i < img.Width; i++)
96
            {
97
                for (int j = 0; j < img.Height; j++)
98
                {
99
                    // Pobranie wartości piksela
100
                    Color piksel = img.GetPixel(i, j);
101
102
                    // Zmiana jasności piksela o 10 jednostek
103
                    Color nowyPiksel = Color.FromArgb(
104
                        ZetnijWartosc(piksel.R - silaPrzyciemniania),
105
                        ZetnijWartosc(piksel.G - silaPrzyciemniania),
106
                        ZetnijWartosc(piksel.B - silaPrzyciemniania));
107
108
                    // Ustawienie nowej wartości piksela
109
                    img.SetPixel(i, j, nowyPiksel);
110
                }
111
            }
112
113
            Console.WriteLine("...Przyciemniono \n\n");
114
            // Zapisanie zmodyfikowanego obrazu
115
            img.Save(sciezkaZapisuNowegoObrazu);
116
        }
117
118
        public static void ZmienJasnoscObrazu(Bitmap img, int silaModyfikacji)
119
        {
120
            for (int i = 0; i < img.Width; i++)
121
            {
122
                for (int j = 0; j < img.Height; j++)
123
                {
124
                    // Pobranie wartości piksela
125
                    Color piksel = img.GetPixel(i, j);
126
127
                    // Zmiana jasności piksela o 10 jednostek
128
                    Color nowyPiksel = Color.FromArgb(
129
                        ZetnijWartosc(piksel.R + silaModyfikacji),
130
                        ZetnijWartosc(piksel.G + silaModyfikacji),
131
                        ZetnijWartosc(piksel.B + silaModyfikacji));
132
133
                    // Ustawienie nowej wartości piksela
134
                    img.SetPixel(i, j, nowyPiksel);
135
                }
136
            }
137
138
            Console.WriteLine("...Zmieniono jasnosc \n\n");
139
            // Zapisanie zmodyfikowanego obrazu
140
            img.Save(sciezkaZapisuNowegoObrazu);
141
        }
142
143
        public static void ZamienKolory(Bitmap img)
144
        {
145
            
146
            Color kolorDoZamiany, nowykolor;
147
148
            //Pobranie kolorów od użytkownika
149
            Console.WriteLine("Wprowadź wartość koloru do zastąpienia nowym, w formacie RGB. Podaj trzy wartości z zakresu od 0-255, odzielone przecinkiem (,).");
150
            kolorDoZamiany = ZamienStringNaKolor(Console.ReadLine());
151
152
            Console.WriteLine("Wprowadź wartość nowego koloru, w formacie RGB. Podaj trzy wartości z zakresu od 0-255, odzielone przecinkiem (,).");
153
            nowykolor = ZamienStringNaKolor(Console.ReadLine());
154
155
            // Pętla przechodzaca po kazdym pikselu i zamieniająca te o odpowiedniej wartości koloru. 
156
            int licznikZmienionychPikseli = 0;
157
            for (int i = 0; i < img.Width; i++)
158
            {
159
                for (int j = 0; j < img.Height; j++)
160
                {
161
                    Color color = img.GetPixel(i, j);
162
163
                    if (color == kolorDoZamiany)
164
                    {
165
                        img.SetPixel(i, j, nowykolor);
166
                        licznikZmienionychPikseli++;
167
                    }
168
                }
169
            }
170
171
            Console.WriteLine($"Zamieniono {licznikZmienionychPikseli} pikseli.\n\n");
172
173
            //Zapisywanie zmodyfikowanego obrazu
174
            img.Save(sciezkaZapisuNowegoObrazu);
175
        }
176
177
        //Metoda zamienia wprowadzone przez użytkownika wartości RGB na obiekt klasy Color
178
        public static Color ZamienStringNaKolor(string rgb)
179
        {
180
            int r, g, b;
181
182
            try
183
            {
184
                string[] kawalkiRGB = rgb.Split(',');
185
                r = int.Parse(kawalkiRGB[0]);
186
                g = int.Parse(kawalkiRGB[1]);
187
                b = int.Parse(kawalkiRGB[2]);
188
                return Color.FromArgb(r, g, b);
189
            }
190
            catch (Exception e)
191
            {
192
                Console.WriteLine("Nieprawidłowo wprowadzony kolor. Ustawianie koloru domyślnego (czarny).");
193
                return Color.Black;
194
            }
195
        }
196
197
        // Metoda zabezpiecza wykroczenie poza wartości z zakresu 0-255 (RGB), obcinając zmienne poza skalą. 
198
        public static int ZetnijWartosc(int wartosc)
199
        {
200
            if (wartosc < 0) return 0;
201
            if (wartosc > 255) return 255;
202
203
            return wartosc;
204
        }
205
206
        //Metoda pobiera obraz z podanej ścieżki i w przypadku problemu wyświetla komunikat. 
207
        public static Bitmap PobierzObraz(string sciezkaDoPliku)
208
        {
209
            if (File.Exists(sciezkaDoPliku) == false) return null;
210
211
            try
212
            {
213
                Bitmap bitmapa = new Bitmap(sciezkaDoPliku);
214
                return bitmapa;
215
            }
216
            catch (Exception e)
217
            {
218
                Console.WriteLine(e);
219
                return null;
220
            }
221
        }
222
    }
223
}