Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Drawing;
- using System.IO;
- namespace PrzetwarzanieObrazu
- {
- internal class Program
- {
- //Ścieżka do pliku obrazu wejściowego i wyjściowego
- //Plik powinien znajdować się tam gdzie .exe aplikacji
- public static string sciezkaObrazu = $@"image.jpg";
- public static string sciezkaZapisuNowegoObrazu = $@"newImage.jpg";
- public static void Main(string[] args)
- {
- //Pobranie obrazu z pliku
- Bitmap obraz = PobierzObraz(sciezkaObrazu);
- // Sprawdzenie czy obraz został poprawnie załadowany
- bool test = (obraz != null);
- string odpowiedzTestu = test ? "powodzeniem" : "niepowodzeniem";
- Console.WriteLine($"Pobieranie obrazu: {sciezkaObrazu}...\n " +
- $"... zakończono {odpowiedzTestu}\n");
- int wybor;
- while (true && test)
- {
- Console.WriteLine(
- "Wybierz opcję:\n" +
- "[1] Rozjaśnij obraz\n" +
- "[2] Przyciemnij obraz\n" +
- "[3] Zamien kolory\n" +
- "[0] Wyjście");
- wybor = int.Parse(Console.ReadLine());
- Console.Clear();
- switch (wybor)
- {
- case 1:
- //RozjasnijObraz(obraz);
- ZmienJasnoscObrazu(obraz, 50);
- break;
- case 2:
- //PrzyciemnijObraz(obraz);
- ZmienJasnoscObrazu(obraz, -50);
- break;
- case 3:
- ZamienKolory(obraz);
- break;
- case 0:
- Console.WriteLine("Wyjście z aplikacji");
- return;
- default:
- Console.WriteLine("Nieprawidłowa operacja");
- break;
- }
- }
- Console.ReadKey();
- }
- // Metoda do rozjaśniania obrazu
- public static void RozjasnijObraz(Bitmap img)
- {
- int silaRozjasniania = 50;
- // Iteracja przez każdy piksel obrazu
- for (int i = 0; i < img.Width; i++)
- {
- for (int j = 0; j < img.Height; j++)
- {
- // Pobranie wartości piksela
- Color piksel = img.GetPixel(i, j);
- // Zmiana jasności piksela o 10 jednostek
- Color nowyPiksel = Color.FromArgb(
- ZetnijWartosc(piksel.R + silaRozjasniania),
- ZetnijWartosc(piksel.G + silaRozjasniania),
- ZetnijWartosc(piksel.B + silaRozjasniania));
- // Ustawienie nowej wartości piksela
- img.SetPixel(i, j, nowyPiksel);
- }
- }
- Console.WriteLine("...Rozjaśniono \n\n");
- // Zapisanie zmodyfikowanego obrazu
- img.Save(sciezkaZapisuNowegoObrazu);
- }
- public static void PrzyciemnijObraz(Bitmap img)
- {
- int silaPrzyciemniania = 50;
- for (int i = 0; i < img.Width; i++)
- {
- for (int j = 0; j < img.Height; j++)
- {
- // Pobranie wartości piksela
- Color piksel = img.GetPixel(i, j);
- // Zmiana jasności piksela o 10 jednostek
- Color nowyPiksel = Color.FromArgb(
- ZetnijWartosc(piksel.R - silaPrzyciemniania),
- ZetnijWartosc(piksel.G - silaPrzyciemniania),
- ZetnijWartosc(piksel.B - silaPrzyciemniania));
- // Ustawienie nowej wartości piksela
- img.SetPixel(i, j, nowyPiksel);
- }
- }
- Console.WriteLine("...Przyciemniono \n\n");
- // Zapisanie zmodyfikowanego obrazu
- img.Save(sciezkaZapisuNowegoObrazu);
- }
- public static void ZmienJasnoscObrazu(Bitmap img, int silaModyfikacji)
- {
- for (int i = 0; i < img.Width; i++)
- {
- for (int j = 0; j < img.Height; j++)
- {
- // Pobranie wartości piksela
- Color piksel = img.GetPixel(i, j);
- // Zmiana jasności piksela o 10 jednostek
- Color nowyPiksel = Color.FromArgb(
- ZetnijWartosc(piksel.R + silaModyfikacji),
- ZetnijWartosc(piksel.G + silaModyfikacji),
- ZetnijWartosc(piksel.B + silaModyfikacji));
- // Ustawienie nowej wartości piksela
- img.SetPixel(i, j, nowyPiksel);
- }
- }
- Console.WriteLine("...Zmieniono jasnosc \n\n");
- // Zapisanie zmodyfikowanego obrazu
- img.Save(sciezkaZapisuNowegoObrazu);
- }
- public static void ZamienKolory(Bitmap img)
- {
- Color kolorDoZamiany, nowykolor;
- //Pobranie kolorów od użytkownika
- Console.WriteLine("Wprowadź wartość koloru do zastąpienia nowym, w formacie RGB. Podaj trzy wartości z zakresu od 0-255, odzielone przecinkiem (,).");
- kolorDoZamiany = ZamienStringNaKolor(Console.ReadLine());
- Console.WriteLine("Wprowadź wartość nowego koloru, w formacie RGB. Podaj trzy wartości z zakresu od 0-255, odzielone przecinkiem (,).");
- nowykolor = ZamienStringNaKolor(Console.ReadLine());
- // Pętla przechodzaca po kazdym pikselu i zamieniająca te o odpowiedniej wartości koloru.
- int licznikZmienionychPikseli = 0;
- for (int i = 0; i < img.Width; i++)
- {
- for (int j = 0; j < img.Height; j++)
- {
- Color color = img.GetPixel(i, j);
- if (color == kolorDoZamiany)
- {
- img.SetPixel(i, j, nowykolor);
- licznikZmienionychPikseli++;
- }
- }
- }
- Console.WriteLine($"Zamieniono {licznikZmienionychPikseli} pikseli.\n\n");
- //Zapisywanie zmodyfikowanego obrazu
- img.Save(sciezkaZapisuNowegoObrazu);
- }
- //Metoda zamienia wprowadzone przez użytkownika wartości RGB na obiekt klasy Color
- public static Color ZamienStringNaKolor(string rgb)
- {
- int r, g, b;
- try
- {
- string[] kawalkiRGB = rgb.Split(',');
- r = int.Parse(kawalkiRGB[0]);
- g = int.Parse(kawalkiRGB[1]);
- b = int.Parse(kawalkiRGB[2]);
- return Color.FromArgb(r, g, b);
- }
- catch (Exception e)
- {
- Console.WriteLine("Nieprawidłowo wprowadzony kolor. Ustawianie koloru domyślnego (czarny).");
- return Color.Black;
- }
- }
- // Metoda zabezpiecza wykroczenie poza wartości z zakresu 0-255 (RGB), obcinając zmienne poza skalą.
- public static int ZetnijWartosc(int wartosc)
- {
- if (wartosc < 0) return 0;
- if (wartosc > 255) return 255;
- return wartosc;
- }
- //Metoda pobiera obraz z podanej ścieżki i w przypadku problemu wyświetla komunikat.
- public static Bitmap PobierzObraz(string sciezkaDoPliku)
- {
- if (File.Exists(sciezkaDoPliku) == false) return null;
- try
- {
- Bitmap bitmapa = new Bitmap(sciezkaDoPliku);
- return bitmapa;
- }
- catch (Exception e)
- {
- Console.WriteLine(e);
- return null;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement