Kuidas Teisendada RGB-pilte Tekstiks

Kuidas Teisendada RGB-pilte Tekstiks
Kuidas Teisendada RGB-pilte Tekstiks

Video: Kuidas Teisendada RGB-pilte Tekstiks

Video: Kuidas Teisendada RGB-pilte Tekstiks
Video: АВТО LED ЛАМПЫ В ГАБАРИТ РАЗНОЦВЕТНЫЕ С ПУЛЬТОМ Д.У!!! 2024, Mai
Anonim

Iga bmp-pildi piksel kannab teavet oma värvi kohta RGB-mudeli järgi (pildi värvimudel, mis koosneb kolmest komponendist R - punane, G - roheline, B - sinine). RGB värviväärtust on mugavam salvestada kuueteistkümnendformaadis (kuueteistkümnendsüsteemis), kus iga komponendi väärtus jääb vahemikku 00… FF. Kombinatsioon 000000 vastab mustale, FFFFFF - valgele.

Kuidas teisendada RGB-pilte tekstiks
Kuidas teisendada RGB-pilte tekstiks

Alustamiseks avame nimeruumi Joonistamine:

kasutades System. Drawing;

Loome klassi Bitmap uue eksemplari:

Bitmap bmp = uus bitmap ("c: / 1.bmp") / / c: / 1.bmp - pildiaadress

Pikslivärvi väärtuse salvestamiseks võite luua eraldi struktuuri, mille väljad on RGB-komponendid, kuid otsustasin kasutada nimeruumi Joonistamine värvi klassi. Värvi saamiseks kasutame meetodit GetPixel (x, y), kus x, y on pildipiksli koordinaadid. Kui soovite värvi salvestamiseks kasutada oma struktuuri, mitte klassi Color eksemplari, saate ühe RGB komponendi saamiseks meetodi bmp. GetPixel (x, y).x, kus x on R, G või B.

Värv [,] värv = uus Värv [bmp.laius, bmp.kõrgus];

jaoks (int y = 0; y <bmp. Kõrgus; y ++)

jaoks (int x = 0; x <bmp. laius; x ++)

{

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

}

Värviväärtuste kirjutamiseks faili kasutame klassi StreamWriter. Kuna Color-eksemplari R, G, B elemendid on baiditüüpi, teisendame need meetodi ToString ("X2" abil) stringitüübiks, mis salvestab RGB-elementide kuuskantväärtused.

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

jaoks (int y = 0; y <bmp. Kõrgus; y ++)

{

jaoks (int x = 0; x <bmp. laius; x ++)

{

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

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

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

}

steamWriter. WriteLine ();

}

steamWriter. Sule ();

Nüüd teostame vastupidise toimingu - teisendage saadud tekstifail pildiks.

StreamReaderi abil loeme failist teavet.

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

Arvutame pildi laiuse ja kõrguse. Kuna iga piksel võtab 6 tähemärki ja 1 tühiku ning lõpus pole tühikut, kasutame laiuse arvutamiseks järgmist valemit:

temp = txtFile. ReadLine ();

laius = (temp. Pikkus + 1) / 7;

Pildi kõrgus on faili ridade arv:

while (! txtFile. EndOfStream)

{

txtFile. ReadLine ();

kõrgus ++;

}

kõrgus ++;

Teisaldage failis loetud kursor algusesse:

txtFile. DiscardBufferedData ();

Looge klassi Bitmap uus eksemplar:

Bitmap bmp2 = uus Bitmap (laius, kõrgus);

Split meetodi abil jagasime maatriksi elemendid. Deklareerime kolm baiditüübi muutujat - R, G, B. Parse ja Substring meetodite abil valige värvielemendid eraldi.

Pildi piksli selle värviga täitmiseks kasutage meetodit SetPixel (j, i, Color. FromArgb (R, G, B)), kus j, i on pildikoordinaadid, Color. FromArgb (R, G, B) on meetod, mis loob struktuuri Värv.

jaoks (int i = 0; i <kõrgus; i + +)

{

temp = txtFile2. ReadLine ();

string alamstring = temp. Split ('');

jaoks (int j = 0; j <laius; j + +)

{

R = bait. Parse (alamstring [j]. Alamstring (0, 2), System. Globalization. NumberStyles. HexNumber)

G = bait. Parse (alamstring [j]. Alamstring (2, 2), System. Globalization. NumberStyles. HexNumber)

B = bait. Parse (alamstring [j]. Alamstring (4, 2), System. Globalization. NumberStyles. HexNumber)

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

}

}

Nüüd saate pilte salvestada. Kui töötate WindowsFormis, võite kasutada klassi SaveFileDialog:

SaveFileDialog saveImage = uus SaveFileDialog ();

saveImage. Filter = bmp-failid (*. bmp) | *. bmp | kõik failid (*. *)

| *. * ;

saveImage. ShowDialog ();

bmp2. Save (saveImage. FileName);

Soovitan: