Jak Przekonwertować Obrazy RGB Na Tekst

Jak Przekonwertować Obrazy RGB Na Tekst
Jak Przekonwertować Obrazy RGB Na Tekst

Wideo: Jak Przekonwertować Obrazy RGB Na Tekst

Wideo: Jak Przekonwertować Obrazy RGB Na Tekst
Wideo: RGB текст в фотошопе | TUTORIAL 2024, Może
Anonim

Każdy piksel obrazu bmp niesie informację o swoim kolorze z modelu RGB (model kolorów obrazu, który składa się z trzech składowych R – czerwony, G – zielony, B – niebieski). Wygodniej jest przechowywać wartość koloru RGB w formacie szesnastkowym (szesnastkowym), gdzie wartość każdego składnika mieści się w zakresie 00…FF. Kombinacja 000000 odpowiada czerni, FFFFFF - bieli.

Jak przekonwertować obrazy RGB na tekst
Jak przekonwertować obrazy RGB na tekst

Aby rozpocząć, otwórzmy przestrzeń nazw Drawing:

za pomocą System. Drawing;

Stwórzmy nową instancję klasy Bitmap:

Bitmap bmp = new Bitmap ("c: / 1.bmp") / / c: / 1.bmp - adres obrazu

Do przechowywania wartości koloru piksela można stworzyć osobną strukturę, której polami są składowe RGB, ja jednak zdecydowałem się na użycie klasy Color z przestrzeni nazw Drawing. Aby uzyskać kolor, używamy metody GetPixel (x, y), gdzie x, y są współrzędnymi piksela obrazu. Jeśli chcesz użyć własnej struktury do przechowywania koloru, a nie instancji klasy Color, możesz użyć metody bmp. GetPixel (x, y).x, aby uzyskać pojedynczy składnik RGB, gdzie x to R, G lub B.

Kolor [,] kolor = nowy Kolor [bmp. Width, bmp. Height];

for (int y = 0; y <bmp. Height; y ++)

for (int x = 0; x <bmp. Szerokość; x ++)

{

kolor [x, y] = bmp. GetPixel (x, y);

}

Do zapisu wartości kolorów do pliku używamy klasy StreamWriter. Ponieważ elementy R, G, B instancji Color są typu byte, konwertujemy je za pomocą metody ToString („X2”) do typu string, który będzie przechowywać wartości szesnastkowe elementów RGB.

StreamWriter steamWriter = nowy StreamWriter ("c: / 1.txt");

for (int y = 0; y <bmp. Height; y ++)

{

for (int x = 0; x <bmp. Szerokość; x ++)

{

steamWriter. Write (kolor [x, y]. R. ToString ("X2"));

steamWriter. Write (kolor [x, y]. G. ToString ("X2"));

steamWriter. Write (kolor [x, y]. B. ToString ("X2") + ");

}

steamWriter. WriteLine ();

}

steamWriter. Zamknij ();

Teraz wykonajmy operację odwrotną - przekonwertuj powstały plik tekstowy na obraz.

Za pomocą StreamReadera odczytujemy informacje z pliku.

StreamReader txtFile = nowy StreamReader ("c: / 1.txt");

Obliczamy szerokość i wysokość obrazu. Ponieważ każdy piksel zajmuje 6 znaków i 1 przerwę, a na końcu nie ma przerwy, do obliczenia szerokości używamy następującego wzoru:

temp = txtFile. ReadLine();

szerokość = (temp. Długość + 1) / 7;

Wysokość obrazu to liczba wierszy w pliku:

while (! txtFile. EndOfStream)

{

txtFile. ReadLine();

wysokość ++;

}

wysokość ++;

Przenieś wskaźnik odczytu w pliku na początek:

txtFile. DiscardBufferedData ();

Utwórz nową instancję klasy Bitmap:

Bitmapa bmp2 = nowa Bitmapa (szerokość, wysokość);

Metodą split dzielimy elementy macierzy. Deklarujemy trzy zmienne typu byte - R, G, B. Za pomocą metod Parse i Substring wybieramy elementy koloru osobno.

Aby wypełnić piksel na obrazie tym kolorem, użyj metody SetPixel (j, i, Color. FromArgb (R, G, B)), gdzie j, i to współrzędne obrazu Color. FromArgb (R, G, B) to metoda tworząca strukturę Color.

for (int i = 0; i <wysokość; i + +)

{

temp = txtFile2. ReadLine();

string substring = temp. Split ('');

for (int j = 0; j <szerokość; j + +)

{

R = bajt. Parse (podciąg [j]. Podciąg (0, 2), System. Globalization. NumberStyles. HexNumber)

G = bajt. Parse (podciąg [j]. Podciąg (2, 2), System. Globalization. NumberStyles. HexNumber)

B = bajt. Parse (podciąg [j]. Podciąg (4, 2), System. Globalization. NumberStyles. HexNumber)

bmp2. SetPixel (j, i, Color. FromArgb (R, G, B));

}

}

Teraz możesz zapisać obrazy. Jeśli pracujesz w WindowsForm, możesz użyć klasy SaveFileDialog:

SaveFileDialog saveImage = nowy SaveFileDialog ();

saveImage. Filter = pliki bmp (*. bmp) | *. bmp | Wszystkie pliki (*. *)

| *. * ;

saveImage. ShowDialog ();

bmp2. Save (saveImage. FileName);

Zalecana: