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 | } |