Kuinka Muuntaa RGB-kuvat Tekstiksi

Kuinka Muuntaa RGB-kuvat Tekstiksi
Kuinka Muuntaa RGB-kuvat Tekstiksi

Video: Kuinka Muuntaa RGB-kuvat Tekstiksi

Video: Kuinka Muuntaa RGB-kuvat Tekstiksi
Video: Vi minha oxigenação 2024, Marraskuu
Anonim

Jokainen bmp-kuvan pikseli sisältää tietoja väreistään RGB-mallista (kuvan värimalli, joka koostuu kolmesta komponentista R - punainen, G - vihreä, B - sininen). RGB-väriarvo on kätevämpää tallentaa heksadesimaalimuodossa (heksadesimaali), jossa kunkin komponentin arvo on alueella 00… FF. Yhdistelmä 000000 vastaa mustaa, FFFFFF - valkoista.

Kuinka muuntaa RGB-kuvat tekstiksi
Kuinka muuntaa RGB-kuvat tekstiksi

Aloita avaamalla Piirustus-nimitila:

käyttämällä System. Drawing;

Luodaan uusi esiintymä Bitmap-luokasta:

Bittikartta bmp = uusi bittikartta ("c: / 1.bmp") / / c: / 1.bmp - kuvan osoite

Pikselivärien arvon tallentamiseksi voit luoda erillisen rakenteen, jonka kentät ovat RGB-komponentteja, mutta päätin käyttää Väriluokka Piirustus-nimiavaruudesta. Värin saamiseksi käytämme GetPixel (x, y) -menetelmää, jossa x, y ovat kuvapikselin koordinaatit. Jos haluat tallentaa värisi omalla rakenteellasi Väri-luokan esiintymän sijaan, voit käyttää bmp. GetPixel (x, y).x -menetelmää saadaksesi yhden RGB-komponentin, jossa x on R, G tai B.

Väri [,] väri = uusi Väri [bmp. Width, bmp. Height];

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

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

{

väri [x, y] = bmp. GetPixel (x, y);

}

Väriarvojen kirjoittamiseen tiedostoon käytämme StreamWriter-luokkaa. Koska Väri-esiintymän R, G, B-elementit ovat tavutyyppisiä, muunnamme ne ToString ("X2") -menetelmällä merkkijonotyypiksi, joka tallentaa RGB-elementtien hex-arvot.

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

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

{

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

{

steamWriter. Write (väri [x, y]. R. ToString ("X2"));

steamWriter. Write (väri [x, y]. G. ToString ("X2"));

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

}

steamWriter. WriteLine ();

}

steamWriter. Sulje ();

Suoritetaan nyt käänteinen toimenpide - muunnetaan saatu tekstitiedosto kuvaksi.

StreamReaderin avulla luemme tietoja tiedostosta.

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

Laskemme kuvan leveyden ja korkeuden. Koska jokaisessa pikselissä on 6 merkkiä ja yksi aukko, eikä lopussa ole aukkoa, käytämme seuraavaa kaavaa leveyden laskemiseen:

temp = txtFile. ReadLine ();

leveys = (temp. pituus + 1) / 7;

Kuvan korkeus on tiedoston rivien määrä:

while (! txtFile. EndOfStream)

{

txtFile. ReadLine ();

korkeus ++;

}

korkeus ++;

Siirrä tiedoston luettu osoitin alkuun:

txtFile. DiscardBufferedData ();

Luo uusi Bitmap-luokan ilmentymä:

Bittikartta bmp2 = uusi bittikartta (leveys, korkeus);

Jakomenetelmällä jaetaan matriisin elementit. Ilmoitamme kolme tavutyyppistä muuttujaa - R, G, B. Valitse värielementit Parse- ja Substring-menetelmillä.

Täytä kuvan pikseli tällä värillä käyttämällä SetPixel (j, i, Color. FromArgb (R, G, B)) -menetelmää, jossa j, i ovat kuvan koordinaatit, Color. FromArgb (R, G, B) on menetelmä, joka luo rakenteen Väri.

for (int i = 0; i <korkeus; i + +)

{

temp = txtFile2. ReadLine ();

merkkijono substing = temp. Split ('');

for (int j = 0; j <leveys; j + +)

{

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

G = tavu. Parse (substing [j]. Substring (2, 2), System. Globalization. NumberStyles. HexNumber)

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

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

}

}

Nyt voit tallentaa kuvat. Jos työskentelet WindowsFormissa, voit käyttää SaveFileDialog-luokkaa:

SaveFileDialog saveImage = uusi SaveFileDialog ();

saveImage. Filter = bmp-tiedostot (*. bmp) | *. bmp | kaikki tiedostot (*. *)

| *. * ;

saveImage. ShowDialog ();

bmp2. Save (saveImage. FileName);

Suositeltava: