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, Studeni
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). Prikladnije 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:

Bitmap 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 upotrijebiti 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 bajtnog tipa, pretvaramo ih pomoću metode ToString ("X2") u vrstu niza koja ć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 podatke 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 ();

širina = (temp. Length + 1) / 7;

Visina slike je broj redaka u datoteci:

while (! txtFile. EndOfStream)

{

txtFile. ReadLine ();

visina ++;

}

visina ++;

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

txtFile. DiscardBufferedData ();

Stvorite novu instancu klase Bitmap:

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

Metodom split podijelili smo elemente matrice. Deklariramo tri varijable bajtnog tipa - R, G, B. Pomoću metoda Parse i Substring odaberite elemente boja zasebno.

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 ();

niz podniz = 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 spremiti 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. Spremiti (saveImage. FileName);

Preporučeni: