So Konvertieren Sie RGB-Bilder In Text

So Konvertieren Sie RGB-Bilder In Text
So Konvertieren Sie RGB-Bilder In Text

Video: So Konvertieren Sie RGB-Bilder In Text

Video: So Konvertieren Sie RGB-Bilder In Text
Video: Bild in Text konvertieren 2024, November
Anonim

Jedes Pixel eines bmp-Bildes trägt Informationen über seine Farbe aus dem RGB-Modell (dem Farbmodell des Bildes, das aus den drei Komponenten R - Rot, G - Grün, B - Blau besteht). Es ist bequemer, den RGB-Farbwert im Hex-Format (hexadezimal) zu speichern, wobei der Wert jeder Komponente im Bereich 00… FF liegt. Die Kombination 000000 entspricht Schwarz, FFFFFF - Weiß.

So konvertieren Sie RGB-Bilder in Text
So konvertieren Sie RGB-Bilder in Text

Öffnen wir zunächst den Drawing-Namespace:

Verwenden von System. Drawing;

Erstellen wir eine neue Instanz der Bitmap-Klasse:

Bitmap bmp = neue Bitmap ("c:\ 1.bmp") / / c: / 1.bmp - Bildadresse

Um den Pixelfarbwert zu speichern, können Sie eine separate Struktur erstellen, deren Felder RGB-Komponenten sind, aber ich habe mich entschieden, die Color-Klasse aus dem Drawing-Namespace zu verwenden. Um die Farbe zu erhalten, verwenden wir die GetPixel (x, y)-Methode, wobei x, y die Koordinaten des Bildpixels sind. Wenn Sie Ihre eigene Struktur zum Speichern der Farbe anstelle einer Instanz der Color-Klasse verwenden möchten, können Sie die bmp. GetPixel (x, y).x-Methode verwenden, um eine einzelne RGB-Komponente zu erhalten, wobei x für R steht. G oder B.

Farbe [,] Farbe = neue Farbe [bmp. Width, bmp. Height];

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

für (int x = 0; x <bmp. Breite; x ++)

{

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

}

Um Farbwerte in eine Datei zu schreiben, verwenden wir die StreamWriter-Klasse. Da die R-, G-, B-Elemente der Color-Instanz vom Typ Byte sind, konvertieren wir sie mit der Methode ToString ("X2") in einen String-Typ, der die Hex-Werte der RGB-Elemente speichert.

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

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

{

für (int x = 0; x <bmp. Breite; x ++)

{

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

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

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

}

steamWriter. WriteLine();

}

steamWriter. Schließen ();

Führen wir nun den umgekehrten Vorgang aus - konvertieren Sie die resultierende Textdatei in ein Bild.

Mit Hilfe von StreamReader lesen wir Informationen aus der Datei.

StreamReader txtFile = neuer StreamReader ("c:\ 1.txt");

Wir berechnen die Breite und Höhe des Bildes. Da jedes Pixel 6 Zeichen und 1 Lücke benötigt und es am Ende keine Lücke gibt, verwenden wir die folgende Formel, um die Breite zu berechnen:

temp = txtFile. ReadLine ();

Breite = (Temp. Länge + 1) / 7;

Die Bildhöhe ist die Anzahl der Zeilen in der Datei:

während (! txtFile. EndOfStream)

{

txtFile. ReadLine();

Höhe ++;

}

Höhe ++;

Verschieben Sie den Lesezeiger in der Datei an den Anfang:

txtFile. DiscardBufferedData ();

Erstellen Sie eine neue Instanz der Bitmap-Klasse:

Bitmap bmp2 = neue Bitmap (Breite, Höhe);

Mit der Split-Methode teilen wir die Elemente der Matrix. Wir deklarieren drei Variablen vom Byte-Typ - R, G, B. Wählen Sie mit den Methoden Parse und Substring die Farbelemente separat aus.

Um die Pixel im Bild mit dieser Farbe zu füllen, verwenden Sie die Methode SetPixel (j, i, Color. FromArgb (R, G, B)), wobei j, i die Bildkoordinaten sind, Color. FromArgb (R, G, B,) ist die Methode, die die Struktur Color erstellt.

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

{

temp = txtFile2. ReadLine ();

Zeichenfolge Teilzeichenfolge = temp. Split ('');

für (int j = 0; j <Breite; j + +)

{

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

G = byte. Parse (Teilzeichenfolge [j]. Teilzeichenfolge (2, 2),

System. Globalization. NumberStyles. HexNumber)

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

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

}

}

Jetzt können Sie die Bilder speichern. Wenn Sie in WindowsForm arbeiten, können Sie die SaveFileDialog-Klasse verwenden:

SaveFileDialog saveImage = new SaveFileDialog ();

saveImage. Filter = bmp-Dateien (*. bmp) | *. bmp | Alle Dateien (*. *)

| *. * ;

saveImage. ShowDialog ();

bmp2. Save (saveImage. FileName);

Empfohlen: