Advertisement
ada1711

Untitled

Oct 27th, 2024
8
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.05 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement