Ako Prevádzať Obrázky RGB Na Text

Ako Prevádzať Obrázky RGB Na Text
Ako Prevádzať Obrázky RGB Na Text

Video: Ako Prevádzať Obrázky RGB Na Text

Video: Ako Prevádzať Obrázky RGB Na Text
Video: Текст песни “Pico” на русском(Friday Night Funkin`) 2024, Smieť
Anonim

Každý pixel obrázka bmp nesie informácie o svojej farbe z modelu RGB (farebný model obrázka, ktorý sa skladá z troch zložiek R - červená, G - zelená, B - modrá). Je pohodlnejšie ukladať hodnotu farieb RGB v hexadecimálnom formáte (hexadecimálne), kde je hodnota každej zložky v rozmedzí 00 … FF. Kombinácia 000000 zodpovedá čiernej farbe, FFFFFF - bielej farbe.

Ako prevádzať obrázky RGB na text
Ako prevádzať obrázky RGB na text

Ak chcete začať, otvorme si menný priestor Kreslenie:

pomocou System. Drawing;

Vytvorme novú inštanciu triedy Bitmap:

Bitová mapa bmp = nová bitová mapa ("c: / 1.bmp") / / c: / 1.bmp - adresa obrázka

Ak chcete uložiť hodnotu farby pixelov, môžete vytvoriť samostatnú štruktúru, ktorej polia sú komponenty RGB, ale rozhodol som sa použiť triedu Color z menného priestoru Draw. Na získanie farby používame metódu GetPixel (x, y), kde x, y sú súradnice obrazového pixelu. Ak chcete na uloženie farby použiť svoju vlastnú štruktúru, a nie inštanciu triedy Color, môžete použiť metódu bmp. GetPixel (x, y).x na získanie jediného komponentu RGB, kde x je R, G alebo B.

Farba [,] farba = nová Farba [bmp. Šírka, bmp. Výška];

pre (int y = 0; y <bmp. výška; y ++)

pre (int x = 0; x <bmp. šírka; x ++)

{

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

}

Na zápis hodnôt farieb do súboru používame triedu StreamWriter. Pretože prvky R, G, B inštancie Color sú bajtového typu, prevádzame ich pomocou metódy ToString („X2“) na typ reťazca, ktorý uloží hexadecimálne hodnoty prvkov RGB.

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

pre (int y = 0; y <bmp. výška; y ++)

{

pre (int x = 0; x <bmp. šírka; x ++)

{

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

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

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

}

steamWriter. WriteLine ();

}

steamWriter. Close ();

Teraz urobme reverznú operáciu - výsledný textový súbor preveďte na obrázok.

Pomocou aplikácie StreamReader načítame informácie zo súboru.

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

Vypočítame šírku a výšku obrázka. Pretože každý pixel má 6 znakov a 1 medzeru a na konci nie je medzera, na výpočet šírky použijeme nasledujúci vzorec:

temp = txtFile. ReadLine ();

šírka = (tepl. dĺžka + 1) / 7;

Výška obrázka je počet riadkov v súbore:

while (! txtFile. EndOfStream)

{

txtFile. ReadLine ();

výška ++;

}

výška ++;

Posuňte ukazovateľ čítania v súbore na začiatok:

txtFile. DiscardBufferedData ();

Vytvorte novú inštanciu triedy Bitmap:

Bitmapa bmp2 = nová bitmapa (šírka, výška);

Metódou split sme rozdelili prvky matice. Deklarujeme tri premenné bajtového typu - R, G, B. Pomocou metód Parse a Substring vyberieme farebné prvky osobitne.

Na vyplnenie pixelu v obrázku touto farbou použite metódu SetPixel (j, i, Color. FromArgb (R, G, B)), kde j, i sú súradnice obrázka, Color. FromArgb (R, G, B)) je metóda, ktorá vytvára štruktúru Color.

pre (int i = 0; i <výška; i + +)

{

temp = txtFile2. ReadLine ();

string substring = temp. Split ('');

pre (int j = 0; j <šírka; j + +)

{

R = byte. Pars (podreťazec [j]. Podreťazec (0, 2), System. Globalization. NumberStyles. HexNumber)

G = byte. Pars (podreťazec [j]. Podreťazec (2, 2), System. Globalization. NumberStyles. HexNumber)

B = byte. Pars (podreťazec [j]. Podreťazec (4, 2), System. Globalization. NumberStyles. HexNumber)

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

}

}

Teraz môžete obrázky uložiť. Ak pracujete v systéme WindowsForm, môžete použiť triedu SaveFileDialog:

SaveFileDialog saveImage = nový SaveFileDialog ();

saveImage. Filter = súbory bmp (*. bmp) | *. bmp | všetky súbory (*. *)

| *. * ;

saveImage. ShowDialog ();

bmp2. Save (saveImage. FileName);

Odporúča: