Kako Pretvoriti RGB Slike U Tekst

Kako Pretvoriti RGB Slike U Tekst
Kako Pretvoriti RGB Slike U Tekst

Video: Kako Pretvoriti RGB Slike U Tekst

Video: Kako Pretvoriti RGB Slike U Tekst
Video: TEKST IZ SLIKE? KAKO? - NewOCR 2024, Maj
Anonim

Svaki piksel BMP slike nosi informacije o svojoj boji iz RGB modela (model boje slike koji se sastoji od tri komponente R - crvena, G - zelena, B - plava). Pogodnije je pohraniti vrijednost RGB boje u heksadecimalnom formatu (heksadecimalnom), gdje je vrijednost svake komponente u rasponu 00 … FF. Kombinacija 000000 odgovara crnoj boji, FFFFFF - bijeloj.

Kako pretvoriti RGB slike u tekst
Kako pretvoriti RGB slike u tekst

Za početak otvorimo prostor imena Crtanje:

pomoću System. Drawing;

Stvorimo novu instancu klase Bitmap:

Bitmapa bmp = nova bitmapa ("c: / 1.bmp") / / c: / 1.bmp - adresa slike

Da biste pohranili vrijednost boje piksela, možete stvoriti zasebnu strukturu, čija su polja RGB komponente, ali odlučio sam da koristim klasu Color iz prostora imena Crtanje. Da bismo dobili boju, koristimo metodu GetPixel (x, y), gdje su x, y koordinate piksela slike. Ako želite koristiti vlastitu strukturu za pohranu boje, a ne primjerak klase Color, tada možete koristiti metodu bmp. GetPixel (x, y).x da biste dobili jednu RGB komponentu, gdje je x R, G ili B.

Boja [,] boja = nova Boja [bmp. Width, bmp. Height];

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

za (int x = 0; x <bmp. Width; x ++)

{

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

}

Da bismo zapisali vrijednosti boja u datoteku, koristimo klasu StreamWriter. Budući da su R, G, B elementi instance Color tipa bajta, pretvaramo ih pomoću metode ToString ("X2") u tip niza koji će pohraniti hex vrijednosti RGB elemenata.

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

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

{

za (int x = 0; x <bmp. Width; x ++)

{

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

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

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

}

steamWriter. WriteLine ();

}

steamWriter. Close ();

Izvršimo sada obrnutu operaciju - pretvorimo rezultirajuću tekstualnu datoteku u sliku.

Uz pomoć StreamReader-a čitamo informacije iz datoteke.

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

Izračunavamo širinu i visinu slike. Budući da svaki piksel uzima 6 znakova i 1 razmak, a na kraju nema praznine, za izračunavanje širine koristimo sljedeću formulu:

temp = txtFile. ReadLine ();

width = (temp. Length + 1) / 7;

Visina slike je broj linija u datoteci:

while (! txtFile. EndOfStream)

{

txtFile. ReadLine ();

visina ++;

}

visina ++;

Pomaknite pokazivač čitanja u datoteci na početak:

txtFile. DiscardBufferedData ();

Kreirajte novu instancu klase Bitmap:

Bitmapa bmp2 = nova bitmapa (širina, visina);

Metodom split razdvajamo elemente matrice. Deklariramo tri varijable bajt tipa - R, G, B. Koristeći metode Parse i Substring, zasebno odaberite elemente boje.

Za popunjavanje piksela na slici ovom bojom koristite metodu SetPixel (j, i, Color. FromArgb (R, G, B)), gdje su j, i koordinate slike, Color. FromArgb (R, G, B) je metoda koja stvara strukturu Color.

za (int i = 0; i <visina; i + +)

{

temp = txtFile2. ReadLine ();

string substring = temp. Split ('');

za (int j = 0; j <širina; j + +)

{

R = bajt. Parse (podniz [j]. Podniz (0, 2), System. Globalization. NumberStyles. HexNumber)

G = bajt. Parse (podniz [j]. Podniz (2, 2), System. Globalization. NumberStyles. HexNumber)

B = bajt. Parse (podniz [j]. Podniz (4, 2), System. Globalization. NumberStyles. HexNumber)

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

}

}

Sada možete sačuvati slike. Ako radite u WindowsFormu, možete koristiti klasu SaveFileDialog:

SaveFileDialog saveImage = novo SaveFileDialog ();

saveImage. Filter = bmp datoteke (*. bmp) | *. bmp | Sve datoteke (*. *)

| *. * ;

saveImage. ShowDialog ();

bmp2. Save (saveImage. FileName);

Preporučuje se: