Az RGB Képek Konvertálása Szöveggé

Az RGB Képek Konvertálása Szöveggé
Az RGB Képek Konvertálása Szöveggé

Videó: Az RGB Képek Konvertálása Szöveggé

Videó: Az RGB Képek Konvertálása Szöveggé
Videó: Diktáló program - hang átalakítása szöveggé gyorsan , egyszerűen 📤 2024, November
Anonim

A bmp kép minden pixelje az RGB modellből (a kép színmodellje, amely három R - piros, G - zöld, B - kék) áll. Kényelmesebb tárolni az RGB színértéket hex formátumban (hexadecimális), ahol az egyes komponensek értéke 00… FF tartományban van. A 000000 kombináció a feketének, az FFFFFF - a fehérnek felel meg.

Az RGB képek konvertálása szöveggé
Az RGB képek konvertálása szöveggé

A kezdéshez nyissuk meg a Rajz névterét:

a System. Drawing;

Hozzunk létre egy új példányt a Bitmap osztályból:

Bitmap bmp = new Bitmap ("c: / 1.bmp") / / c: / 1.bmp - kép címe

A pixel színértékének tárolásához külön struktúrát hozhat létre, amelynek mezői RGB komponensek, de úgy döntöttem, hogy a Szín osztályt használom a Rajz névtérből. A szín megszerzéséhez a GetPixel (x, y) módszert alkalmazzuk, ahol x, y a képpont koordinátái. Ha a szín tárolásához a saját struktúráját szeretné használni, a Color osztály példánya helyett, akkor a bmp. GetPixel (x, y).x módszerrel egyetlen RGB komponenst kaphat, ahol x R, G vagy B.

Szín [,] szín = új Szín [bmp.szélesség, bmp. Height];

mert (int y = 0; y <bmp. Magasság; y ++)

for (int x = 0; x <bmp.szélesség; x ++)

{

szín [x, y] = bmp. GetPixel (x, y);

}

Színértékek fájlba írásához a StreamWriter osztályt használjuk. Mivel a Színpéldány R, G, B elemei bájt típusúak, a ToString ("X2") módszerrel átalakítjuk azokat egy karaktersorozat típusgá, amely tárolja az RGB elemek hex értékeit.

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

mert (int y = 0; y <bmp. Magasság; y ++)

{

for (int x = 0; x <bmp.szélesség; x ++)

{

steamWriter. Write (szín [x, y]. R. ToString ("X2"));

steamWriter. Write (szín [x, y]. G. ToString ("X2"));

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

}

steamWriter. WriteLine ();

}

steamWriter. Close ();

Most végezzük el a fordított műveletet - konvertáljuk a kapott szöveges fájlt képpé.

A StreamReader segítségével információkat olvasunk le a fájlból.

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

Kiszámoljuk a kép szélességét és magasságát. Mivel minden pixel 6 karaktert és 1 rést vesz igénybe, és a végén nincs hézag, a következő képletet használjuk a szélesség kiszámításához:

temp = txtFile. ReadLine ();

szélesség = (temp. Hossz + 1) / 7;

A kép magassága a fájl sorainak száma:

míg (! txtFile. EndOfStream)

{

txtFile. ReadLine ();

magasság ++;

}

magasság ++;

Vigye a fájl olvasási mutatóját az elejére:

txtFile. DiscardBufferedData ();

Hozzon létre egy új példányt a Bitmap osztályból:

Bitmap bmp2 = új Bitmap (szélesség, magasság);

A felosztási módszer segítségével felosztjuk a mátrix elemeit. Három byte típusú változót deklarálunk - R, G, B. A Parse és az Substring módszerekkel külön válasszuk ki a színelemeket.

Ha a kép pixelét ezzel a színnel szeretné kitölteni, használja a SetPixel (j, i, Color. FromArgb (R, G, B)) módszert, ahol j, i a kép koordinátái, Color. FromArgb (R, G, B) a színszerkezetet létrehozó módszer.

for (int i = 0; i <magasság; i + +)

{

temp = txtFile2. ReadLine ();

string szubsztring = temp. Split ('');

for (int j = 0; j <szélesség; j + +)

{

R = bájt. Parse (sztring [j]. Substring (0, 2), System. Globalization. NumberStyles. HexNumber)

G = bájt. Parse (sztring [j]. Alstring (2, 2), System. Globalization. NumberStyles. HexNumber)

B = bájt. Parse (sztring [j]. Substring (4, 2), System. Globalization. NumberStyles. HexNumber)

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

}

}

Most elmentheti a képeket. Ha WindowsFormban dolgozik, használhatja a SaveFileDialog osztályt:

SaveFileDialog saveImage = new SaveFileDialog ();

saveImage. Filter = bmp fájlok (*. bmp) | *. bmp | Minden fájl (*. *)

| *. * ;

saveImage. ShowDialog ();

bmp2. Save (saveImage. FileName);

Ajánlott: