Cum Se Convertesc Imaginile RGB în Text

Cum Se Convertesc Imaginile RGB în Text
Cum Se Convertesc Imaginile RGB în Text

Video: Cum Se Convertesc Imaginile RGB în Text

Video: Cum Se Convertesc Imaginile RGB în Text
Video: Cum poti converti o culoare din RGB in HSV si invers 2024, Mai
Anonim

Fiecare pixel al unei imagini bmp transportă informații despre culoarea sa din modelul RGB (modelul color al imaginii, care este format din trei componente R - roșu, G - verde, B - albastru). Este mai convenabil să stocați valoarea culorii RGB în format hex (hexazecimal), unde valoarea fiecărei componente este în intervalul 00 … FF. Combinația 000000 corespunde negru, FFFFFF - alb.

Cum se convertesc imaginile RGB în text
Cum se convertesc imaginile RGB în text

Pentru a începe, să deschidem spațiul de nume Desen:

folosind System. Drawing;

Să creăm o nouă instanță a clasei Bitmap:

Bitmap bmp = Bitmap nou ("c: / 1.bmp") / / c: / 1.bmp - adresa imaginii

Pentru a stoca valoarea culorii pixelilor, puteți crea o structură separată, ale cărei câmpuri sunt componente RGB, dar am decis să folosesc clasa Color din spațiul de nume Drawing. Pentru a obține culoarea, folosim metoda GetPixel (x, y), unde x, y sunt coordonatele pixelului imaginii. Dacă doriți să utilizați propria structură pentru a stoca culoarea, mai degrabă decât o instanță din clasa Color, atunci puteți utiliza metoda bmp. GetPixel (x, y).x pentru a obține o singură componentă RGB, unde x este R, G sau B.

Color [,] color = new Color [bmp. Width, bmp. Height];

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

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

{

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

}

Pentru a scrie valori de culoare într-un fișier, folosim clasa StreamWriter. Deoarece elementele R, G, B ale instanței Color sunt de tip octet, le convertim folosind metoda ToString ("X2") într-un tip șir care va stoca valorile hexagonale ale elementelor RGB.

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

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

{

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

{

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

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

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

}

steamWriter. WriteLine ();

}

steamWriter. Close ();

Acum să efectuăm operația inversă - convertiți fișierul text rezultat într-o imagine.

Cu ajutorul StreamReader citim informații din fișier.

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

Calculăm lățimea și înălțimea imaginii. Deoarece fiecare pixel are 6 caractere și 1 spațiu și nu există niciun spațiu la final, folosim următoarea formulă pentru a calcula lățimea:

temp = txtFile. ReadLine ();

lățime = (lungime temp. + 1) / 7;

Înălțimea imaginii este numărul de linii din fișier:

while (! txtFile. EndOfStream)

{

txtFile. ReadLine ();

înălțime ++;

}

înălțime ++;

Mutați indicatorul citit în fișier la început:

txtFile. DiscardBufferedData ();

Creați o nouă instanță a clasei Bitmap:

Bitmap bmp2 = nou Bitmap (lățime, înălțime);

Folosind metoda split, împărțim elementele matricei. Declarăm trei variabile de tip octet - R, G, B. Folosind metodele Parse și Substring, selectați separat elementele de culoare.

Pentru a umple pixelul din imagine cu această culoare, utilizați metoda SetPixel (j, i, Color. FromArgb (R, G, B)), unde j, i sunt coordonatele imaginii, Color. FromArgb (R, G, B) este metoda care creează structura Culoare.

for (int i = 0; i <înălțime; i + +)

{

temp = txtFile2. ReadLine ();

șir substring = temp. Split ('');

pentru (int j = 0; j <lățime; j + +)

{

R = octet. Parse (șir [j]. Șir (0, 2), System. Globalization. NumberStyles. HexNumber)

G = octet. Parse (șir [j]. Șir (2, 2), System. Globalization. NumberStyles. HexNumber)

B = octet. Parse (șir [j]. Șir (4, 2), System. Globalization. NumberStyles. HexNumber)

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

}

}

Acum puteți salva imaginile. Dacă lucrați în WindowsForm, puteți utiliza clasa SaveFileDialog:

SaveFileDialog saveImage = new SaveFileDialog ();

saveImage. Filter = fișiere bmp (*. bmp) | *. bmp | Toate fișierele (*. *)

| *. * ;

saveImage. ShowDialog ();

bmp2. Save (saveImage. FileName);

Recomandat: