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.
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);