Kako Pretvoriti Slike RGB V Besedilo

Kako Pretvoriti Slike RGB V Besedilo
Kako Pretvoriti Slike RGB V Besedilo

Video: Kako Pretvoriti Slike RGB V Besedilo

Video: Kako Pretvoriti Slike RGB V Besedilo
Video: Kako konvertovati RGB y CMYK u Adobe Illustratoru i Corel Draw X6 2024, November
Anonim

Vsaka slikovna pika bmp slike vsebuje informacije o svoji barvi iz modela RGB (barvni model slike, ki je sestavljen iz treh komponent R - rdeča, G - zelena, B - modra). Primerneje je shraniti barvno vrednost RGB v šestnajstiški obliki (šestnajstiška), kjer je vrednost vsake komponente v območju 00… FF. Kombinacija 000000 ustreza črni, FFFFFF - beli.

Kako pretvoriti slike RGB v besedilo
Kako pretvoriti slike RGB v besedilo

Za začetek odprimo imenski prostor Risba:

z uporabo System. Drawing;

Ustvarimo nov primerek razreda Bitmap:

Bitna slika bmp = nova bitna slika ("c: / 1.bmp") / / c: / 1.bmp - naslov slike

Če želite shraniti barvno vrednost pikslov, lahko ustvarite ločeno strukturo, katere polja so komponente RGB, vendar sem se odločil, da uporabim razred Color iz imenskega prostora Risba. Za pridobitev barve uporabimo metodo GetPixel (x, y), kjer so x, y koordinate slikovne pike. Če želite za shranjevanje barve uporabiti svojo strukturo in ne primerek razreda Color, lahko z metodo bmp. GetPixel (x, y).x dobite eno samo RGB komponento, kjer je x R, G ali B.

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

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

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

{

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

}

Za zapisovanje barvnih vrednosti v datoteko uporabimo razred StreamWriter. Ker so elementi R, G, B v primerku Color bajtnega tipa, jih pretvorimo z metodo ToString ("X2") v niz, ki bo shranil šestnajstiške vrednosti elementov RGB.

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

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

{

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

{

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

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

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

}

steamWriter. WriteLine ();

}

steamWriter. Close ();

Zdaj pa izvedimo obratno operacijo - pretvorimo nastalo besedilno datoteko v sliko.

S pomočjo StreamReaderja beremo podatke iz datoteke.

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

Izračunamo širino in višino slike. Ker ima vsaka slikovna pika 6 znakov in 1 vrzel in na koncu ni nobene vrzeli, za izračun širine uporabimo naslednjo formulo:

temp = txtFile. ReadLine ();

širina = (temp. Length + 1) / 7;

Višina slike je število vrstic v datoteki:

medtem ko (! txtFile. EndOfStream)

{

txtFile. ReadLine ();

višina ++;

}

višina ++;

Premaknite kazalec branja v datoteki na začetek:

txtFile. DiscardBufferedData ();

Ustvarite nov primerek razreda Bitmap:

Bitna slika bmp2 = nova bitna slika (širina, višina);

Z metodo razdeljevanja delimo elemente matrike. Deklariramo tri spremenljivke bajtnega tipa - R, G, B. Z metodama Parse in Substring izberite barvne elemente posebej.

Če želite s to barvo napolniti piksel na sliki, uporabite metodo SetPixel (j, i, Color. FromArgb (R, G, B)), kjer so j, i koordinate slike, Color. FromArgb (R, G, B) je metoda, ki ustvari strukturo Color.

za (int i = 0; i <višina; i + +)

{

temp = txtFile2. ReadLine ();

niz podniz = temp. Split ('');

za (int j = 0; j <širina; j + +)

{

R = bajt. Parse (podniz [j]. Podniz (0, 2), System. Globalization. NumberStyles. HexNumber)

G = bajt. Parse (podniz [j]. Podniz (2, 2), System. Globalization. NumberStyles. HexNumber)

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

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

}

}

Zdaj lahko slike shranite. Če delate v sistemu WindowsForm, lahko uporabite razred SaveFileDialog:

SaveFileDialog saveImage = novo SaveFileDialog ();

saveImage. Filter = bmp datoteke (*. bmp) | *. bmp | Vse datoteke (*. *)

| *. * ;

saveImage. ShowDialog ();

bmp2. Shrani (saveImage. FileName);

Priporočena: