Hur Man Konverterar RGB-bilder Till Text

Hur Man Konverterar RGB-bilder Till Text
Hur Man Konverterar RGB-bilder Till Text

Video: Hur Man Konverterar RGB-bilder Till Text

Video: Hur Man Konverterar RGB-bilder Till Text
Video: Bild på text 2024, November
Anonim

Varje pixel i en bmp-bild innehåller information om dess färg från RGB-modellen (bildens färgmodell, som består av tre komponenter R - röd, G - grön, B - blå). Det är bekvämare att lagra RGB-färgvärde i hex-format (hexadecimal), där värdet för varje komponent ligger i intervallet 00 … FF. Kombinationen 000000 motsvarar svart, FFFFFF - till vit.

Hur man konverterar RGB-bilder till text
Hur man konverterar RGB-bilder till text

För att komma igång, låt oss öppna namnområdet Ritning:

använder System. Drawing;

Låt oss skapa en ny instans av Bitmap-klassen:

Bitmap bmp = ny Bitmap ("c: / 1.bmp") / / c: / 1.bmp - bildadress

För att lagra pixelfärgvärdet kan du skapa en separat struktur, vars fält är RGB-komponenter, men jag bestämde mig för att använda färgklassen från ritningsnamnområdet. För att få färgen använder vi metoden GetPixel (x, y), där x, y är koordinaterna för bildpixeln. Om du vill använda din egen struktur för att lagra färgen, snarare än en instans av Color-klassen, kan du använda metoden bmp. GetPixel (x, y).x för att få en enda RGB-komponent, där x är R, G eller B.

Färg [,] färg = ny Färg [bmp. Width, bmp. Height];

för (int y = 0; y <bmp. Höjd; y ++)

för (int x = 0; x <bmp. Width; x ++)

{

färg [x, y] = bmp. GetPixel (x, y);

}

För att skriva färgvärden till en fil använder vi StreamWriter-klassen. Eftersom R-, G-, B-elementen i Color-instansen är av byte-typ konverterar vi dem med ToString-metoden ("X2") till en strängtyp som lagrar hex-värdena för RGB-elementen.

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

för (int y = 0; y <bmp. Höjd; y ++)

{

för (int x = 0; x <bmp. Width; x ++)

{

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

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

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

}

steamWriter. WriteLine ();

}

steamWriter. Close ();

Låt oss nu utföra den omvända åtgärden - konvertera den resulterande textfilen till en bild.

Med hjälp av StreamReader läser vi information från filen.

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

Vi beräknar bildens bredd och höjd. Eftersom varje pixel tar 6 tecken och 1 mellanrum och det inte finns något mellanrum i slutet använder vi följande formel för att beräkna bredden:

temp = txtFile. ReadLine ();

bredd = (temp. längd + 1) / 7;

Bildhöjd är antalet rader i filen:

while (! txtFile. EndOfStream)

{

txtFile. ReadLine ();

höjd ++;

}

höjd ++;

Flytta läspekaren i filen till början:

txtFile. DiscardBufferedData ();

Skapa en ny instans av Bitmap-klassen:

Bitmap bmp2 = ny Bitmap (bredd, höjd);

Med delningsmetoden delar vi elementen i matrisen. Vi förklarar tre variabler av byte-typen - R, G, B. Använd parse- och substringsmetoderna för att välja färgelement separat.

För att fylla pixeln i bilden med den här färgen, använd metoden SetPixel (j, i, Color. FromArgb (R, G, B)), där j, i är bildkoordinaterna, Color. FromArgb (R, G, B) är metoden som skapar strukturen Färg.

för (int i = 0; i <höjd; i + +)

{

temp = txtFile2. ReadLine ();

sträng substring = temp. Split ('');

för (int j = 0; j <bredd; j + +)

{

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

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

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

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

}

}

Nu kan du spara bilderna. Om du arbetar i WindowsForm kan du använda klassen SaveFileDialog:

SaveFileDialog saveImage = ny SaveFileDialog ();

saveImage. Filter = bmp-filer (*. bmp) | *. bmp | Alla filer (*. *)

| *. * ;

saveImage. ShowDialog ();

bmp2. Save (saveImage. FileName);

Rekommenderad: