Hoe Om RGB-beelde Na Teks Om Te Skakel

Hoe Om RGB-beelde Na Teks Om Te Skakel
Hoe Om RGB-beelde Na Teks Om Te Skakel

Video: Hoe Om RGB-beelde Na Teks Om Te Skakel

Video: Hoe Om RGB-beelde Na Teks Om Te Skakel
Video: HOE de OVERDRACHT van BEELD van papier naar elk oppervlak?! 2024, Mei
Anonim

Elke pixel van 'n bmp-beeld bevat inligting oor die kleur van die RGB-model (die kleurmodel van die prent, wat bestaan uit drie komponente R - rooi, G - groen, B - blou). Dit is gemakliker om RGB-kleurwaarde in heksformaat (heksadesimaal) op te slaan, waar die waarde van elke komponent tussen 00 … FF is. Die kombinasie 000000 stem ooreen met swart, FFFFFF - met wit.

Hoe om RGB-beelde na teks om te skakel
Hoe om RGB-beelde na teks om te skakel

Laat ons die tekening-naamruimte oopmaak om te begin:

gebruik van System. Drawing;

Kom ons skep 'n nuwe instansie van die Bitmap-klas:

Bitmap bmp = nuwe Bitmap ("c: / 1.bmp") / / c: / 1.bmp - beeldadres

Om die pixelkleurwaarde op te slaan, kan u 'n aparte struktuur skep waarvan die velde RGB-komponente is, maar ek het besluit om die Color-klas uit die tekening-naamruimte te gebruik. Om die kleur te kry, gebruik ons die GetPixel (x, y) metode, waar x, y die koördinate van die beeldpixel is. As u u eie struktuur wil gebruik om die kleur op te slaan in plaas van 'n geval van die Color-klas, kan u die metode bmp. GetPixel (x, y).x gebruik om 'n enkele RGB-komponent te kry, waar x R is, G, of B.

Kleur [,] kleur = nuwe Kleur [bmp. Width, bmp. Height];

vir (int y = 0; y <bmp. Hoogte; y ++)

vir (int x = 0; x <bmp. Breedte; x ++)

{

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

}

Om kleurwaardes na 'n lêer te skryf, gebruik ons die StreamWriter-klas. Aangesien die R-, G-, B-elemente van die Kleur-instansie van die byte-tipe is, skakel ons dit om met behulp van die ToString-metode ("X2") in 'n stringtipe wat die hex-waardes van die RGB-elemente sal stoor.

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

vir (int y = 0; y <bmp. Hoogte; y ++)

{

vir (int x = 0; x <bmp. Breedte; x ++)

{

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

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

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

}

steamWriter. WriteLine ();

}

steamWriter. Close ();

Laat ons nou die omgekeerde bewerking uitvoer - omskep die resulterende tekslêer in 'n beeld.

Met behulp van StreamReader lees ons inligting uit die lêer.

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

Ons bereken die breedte en hoogte van die prent. Aangesien elke pixel 6 karakters en 1 gaping het en daar geen gaping aan die einde is nie, gebruik ons die volgende formule om die breedte te bereken:

temp = txtFile. ReadLine ();

breedte = (temp. lengte + 1) / 7;

Beeldhoogte is die aantal lyne in die lêer:

terwyl (! txtFile. EndOfStream)

{

txtFile. ReadLine ();

hoogte ++;

}

hoogte ++;

Beweeg die leeswyser in die lêer na die begin:

txtFile. DiscardBufferedData ();

Skep 'n nuwe instansie van die Bitmap-klas:

Bitmap bmp2 = nuwe Bitmap (breedte, hoogte);

Met behulp van die splitmetode verdeel ons die elemente van die matriks. Ons verklaar drie veranderlikes van die bytesoort - R, G, B. Kies die kleurelemente afsonderlik met behulp van die Parse- en Substring-metodes.

Gebruik die SetPixel (j, i, Color. FromArgb (R, G, B)) metode om die pixel in die afbeelding te vul, waar j, i die beeldkoördinate is, Color. FromArgb (R, G, B) is die metode wat die struktuur Kleur skep.

vir (int i = 0; i <hoogte; i + +)

{

temp = txtFile2. ReadLine ();

string substring = temp. Split ('');

vir (int j = 0; j <breedte; j + +)

{

R = byte. Parse (substring [j]. Substring (0, 2), System. Globalization. NumberStyles. HexNumber)

G = byte. Parse (substring [j]. Substring (2, 2),

System. Globalization. NumberStyles. HexNumber)

B = byte. Parse (substring [j]. Substring (4, 2), System. Globalization. NumberStyles. HexNumber)

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

}

}

Nou kan u die beelde stoor. As u in WindowsForm werk, kan u die SaveFileDialog-klas gebruik:

SaveFileDialog saveImage = nuwe SaveFileDialog ();

saveImage. Filter = bmp-lêers (*. bmp) | *. bmp | Alle lêers (*. *)

| *. * ;

saveImage. ShowDialog ();

bmp2. Save (saveImage. FileName);

Aanbeveel: